$servers="SQL01","SQL02","SQL03"; # Dynamic Credential method 1 $who = whoami if ($who.substring($who.length-2, 2) -eq "-admin"){$username=$who;} else {$username=$who+"-admin";} #$password = Read-Host -Prompt "Input the password for account $username" -AsSecureString $password=convertto-securestring "PASSWORD" -AsPlainText -Force $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username,$password function show{ $show="`n--------------------------------------------------`nThere are $count SQL Servers in this Collection: `n--------------------------------------------------`n" for ($row=0;$row -le $servers.count-1;$row++){ $server=$servers[$row] $show += "$row" + ": " + "$server" + "`n" } return $show } function getPrimary{ do { try { $numOk = $true [int]$setPrimary=Read-Host -Prompt "Please type the index number corresponding to the desired SQL Servername to Set as Primary Node" } # end try catch {$numOK = $false} } # end do until ($setPrimary -lt $servers.count -and $numOK) $global:primaryIndex=$setPrimary } function setPrimary($index){ $target=$servers[$index] Invoke-Command -Credential $cred -ComputerName $target -ScriptBlock { $hostname=hostname "Now setting $hostname as Primary Failover Node..." if ( !(get-module -name "SQLPS" ) ) {import-module -name "SQLPS" -DisableNameChecking | out-null} $cluster=(get-clusterresource).Name[3] $databases= Get-ChildItem "SQLSERVER:\Sql\$env:computername\default\AvailabilityGroups\$cluster\AvailabilityDatabases" $databases | Suspend-SqlAvailabilityDatabase Switch-SqlAvailabilityGroup -Path SQLSERVER:\sql\$env:computername\default\availabilitygroups\$cluster -AllowDataLoss $databases | Resume-SqlAvailabilityDatabase "Updating listener IP Address with DNS..." if ( !(get-module -name "FailoverClusters" ) ) {Import-Module FailoverClusters} $listener=(Get-ClusterResource | Get-ClusterParameter | Where-Object {$_.Name -eq "name"})[1].Value $listenerAlias=(Get-ClusterResource | Get-ClusterParameter | Where-Object {$_.Name -eq "name"})[1].ClusterObject.Name Get-ClusterResource $listenerAlias | Update-ClusterNetworkNameResource Resolve-DnsName $listener } "Now setting the other Nodes to resume Database movements..." $servers | foreach { if ($_ -ne $target){ Invoke-Command -Credential $cred -ComputerName $_ -ScriptBlock{ hostname if ( !(get-module -name "SQLPS" ) ) { import-module -name "SQLPS" -DisableNameChecking | out-null } $cluster=(get-clusterresource).Name[3] $databases= Get-ChildItem "SQLSERVER:\Sql\$env:computername\default\AvailabilityGroups\$cluster\AvailabilityDatabases" $databases | Resume-SqlAvailabilityDatabase } } } "Process is completed to set $target as the Primary Node" } show getPrimary setPrimary $primaryIndex
March 29, 2019March 29, 2019
0 Comments