Изредка я занимаюсь обслуживанием почтовый серверов MS Exchange. Поставить обновления и кумулятивные пакеты – в принципе несложно.
В очередной раз выполняя процедуру по выводу сервера в режим обслуживания, я подумал – почему бы не написать скрипт, содержащий шесть PowerShell-командлетов вида
1 |
Set-MailboxServer <Servername> -DatabaseCopyAutoActivationPolicy Blocked |
в которые еще и нужно добавить имя сервера, выводимого в режим обслуживания.
В общем, я написал скрипт, который при запуске с сервера MS Exchange спрашивает “выберите какую операцию вы хотите выполнить”: ввод в режим обслуживания или выход из него.
В зависимости от выбранной опции и роли сервера скрипт выполняет требуемые PS-командлеты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$servername=$env:computername $dagname=(Get-DatabaseAvailabilityGroup | where {$_.servers -contains $servername}).name $partner_fqdn=[System.Net.Dns]::GetHostByName(((Get-DatabaseAvailabilityGroup $dagname).servers | where {!($_.name -eq $servername)} | select -First 1).name).Hostname $answer="" while (!(($answer -eq "1") -or($answer -eq "2"))){ Write-Host("Please choose the operation") Write-Host("1: Enter the maintenance mode") Write-Host("2: Exit the maintenance mode") $answer=read-host "Please enter the ID of operation" } if($answer -eq "1"){ if((get-exchangeserver $servername).serverrole -match "Mailbox"){ Set-ServerComponentState $servername -Component HubTransport -State Draining -Requester Maintenance Redirect-Message -Server $servername -Target $partner_fqdn -Confirm:$false Suspend-ClusterNode $servername Set-MailboxServer $servername -DatabaseCopyActivationDisabledAndMoveNow $True Set-MailboxServer $servername -DatabaseCopyAutoActivationPolicy Blocked } Set-ServerComponentState $servername -Component ServerWideOffline -State inactive -Requester Maintenance } else{ Set-ServerComponentState $servername -Component ServerWideOffline -State Active -Requester Maintenance if((get-exchangeserver $servername).serverrole -match "Mailbox"){ Resume-ClusterNode $servername Set-MailboxServer $servername -DatabaseCopyActivationDisabledAndMoveNow $False Set-MailboxServer $servername -DatabaseCopyAutoActivationPolicy Unrestricted Set-ServerComponentState $servername -Component HubTransport -State Active -Requester Maintenance } } |
Критика приветствуется.