mikedopp icon

ScheduledTask-ClusterCreation.ps1

mikedopp | PRO | 10/31/17 10:12:03 PM UTC | 0 ⭐ | 403 👁️ | Never ⏰ | []
PowerShell |

4 KB

|

None

|

0 👍

/

0 👎

############################################################
############################################################
### 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