############################################################
############################################################
### The following script is called from Scheduled task with the action "provision-storage-2016.ps1 cluster01.blah.com"
############################################################
Start-Transcript -Append -Path e:\temp\transcript.txt
# Import MySQL Driver and Connect to DB
Import-Module -Name C:\windows\system32\WindowsPowerShell\v1.0\Modules\MySQL\MySql.Data.dll
$ConnectionString = “Server=localhost;uid=blah; pwd=blah;Database=database;”
$MySQLConnection = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection
$MySQLConnection.ConnectionString = $ConnectionString
$MySQLConnection.Open()
# Grab most recent pending provision
# Build Query
$query = "SELECT * FROM table WHERE pending=1 ORDER BY date ASC LIMIT 0,1"
# Execute Query
$command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $MySQLConnection)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
# Query to Array
$table = new-object system.data.datatable
$dataAdapter.Fill($table)
# Execute the provision
# Connect and Enter Remote Session Context
$psuser = "domain\user"
$pspassword = ConvertTo-SecureString "password" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $psuser, $pspassword
New-PSSession -ComputerName $args[0] -Credential $cred
Enter-PSSession -ComputerName $args[0]
$argumentlist = @($table.username),@($table.password),@($table.provisionstring),@($table.storagepool),@($table.sizeinbytes),@($table.clustergroup)
$argumentlist | Out-File -Append -FilePath e:\temp\args.txt
invoke-command -computername @($table.cluster) -FilePath "E:\provision-scripts\provision-smb3-share.ps1" -ArgumentList $argumentlist
############################################################
############################################################
NOW THIS FILE IS THE PORTION THAT CREATES A MOUNTPOINT, CREATES AN NTFS VOLUME, AND ADDS THE RESOURCE TO THE "file server" cluster group
############################################################
# Inputs
param(
[Parameter(Mandatory=$true,Position=1)]
[string]$username,
[Parameter(Mandatory=$true,Position=2)]
[string]$randpass,
[Parameter(Mandatory=$true,Position=3)]
[string]$provisionstring,
[Parameter(Mandatory=$true,Position=4)]
[string]$storagepoolfriendlyname,
[Parameter(Mandatory=$true,Position=5)]
[string]$volumesizeinbytes,
[Parameter(Mandatory=$true,Position=6)]
[string]$clustergroup
)
# New User
NET USER $username $randpass /ADD /DOMAIN /Y
try{
# New Directory to Mount New Volume to
$mountpoint = "M:\" + $provisionstring
New-Item -Path $mountpoint –ItemType Directory
# New Volume
new-volume -StoragePoolFriendlyName $storagepoolfriendlyname -friendlyname $provisionstring -FileSystem NTFS -ResiliencySettingName Parity -PhysicalDiskRedundancy 2 -ProvisioningType Fixed -Size $volumesizeinbytes -AccessPath $mountpoint -Verbose
# Turn Off Maintenance Mode
#resume-clusterresource -Name "Cluster Virtual Disk (" + $provisionstring + ")"
# Attach Volume to File Server Role
$fsrole = Get-ClusterGroup | Where { $_.Name -eq $clustergroup}
#write-host "Cluster Group: " + $fsrole
$clresource = Get-ClusterResource | where {$_.OwnerGroup -eq "Available Storage" -and $_.Name -eq "Cluster Virtual Disk (" + $provisionstring + ")"}
#$clresource | Out-File -FilePath m:\provision\output.txt
#write-host "Cluster Resource: " + $clresource
Move-ClusterResource -Name $clresource -Group $fsrole
# New SMB3 Share
New-SmbShare -Name $provisionstring -Path $mountpoint -ScopeName $clustergroup -CachingMode None -ChangeAccess $username -ContinuouslyAvailable $true -Description $provisionstring -EncryptData $true -FolderEnumerationMode AccessBased -FullAccess "Domain Admins" -Confirm
}
Catch {
#whatever
}
Comments