Скрипт по включению режима обслуживания MS Exchange 2013

Изредка я занимаюсь обслуживанием почтовый серверов MS Exchange. Поставить обновления и кумулятивные пакеты — в принципе несложно.

В очередной раз выполняя процедуру по выводу сервера в режим обслуживания, я подумал — почему бы не написать скрипт, содержащий шесть PowerShell-командлетов вида

Set-MailboxServer <Servername> -DatabaseCopyAutoActivationPolicy Blocked

в которые еще и нужно добавить имя сервера, выводимого в режим обслуживания.

В общем, я написал скрипт, который при запуске с сервера MS Exchange спрашивает «выберите какую операцию вы хотите выполнить»: ввод в режим обслуживания или выход из него.

В зависимости от выбранной опции и роли сервера скрипт выполняет требуемые PS-командлеты.

$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
 }
}

Критика приветствуется.

Запись опубликована в рубрике Exchange, Microsoft. Добавьте в закладки постоянную ссылку.

4 комментария на «Скрипт по включению режима обслуживания MS Exchange 2013»

  1. Anonymous говорит:

    У меня в хозяйстве нет DAG, но разве родные скрипты StartDagServerMaintenance.ps1 и StopDagServerMaintenance.ps1 для этого не годятся?

    https://docs.microsoft.com/en-us/exchange/high-availability/manage-ha/manage-dags?view=exchserver-2019#performing-maintenance-on-dag-members

  2. Андрей Вахитов говорит:

    Нет, не годятся, так как они выполняют лишь эту часть функционала:
    Suspend-ClusterNode $servername
    Set-MailboxServer $servername -DatabaseCopyActivationDisabledAndMoveNow $True
    Set-MailboxServer $servername -DatabaseCopyAutoActivationPolicy Blocked

    Если вы посмотрите по ссылке в статье, то там как раз и приведены остальные командлеты либо ДО, либо ПОСЛЕ запуска этого скрипта.
    P.S. Кстати, там еще перезапускается служба транспорта
    Restart-Service MSExchangeTransport
    Уточню у коллег, почему мы так не делаем…

  3. Roman говорит:

    Для 2016 актуально?

  4. Андрей Вахитов говорит:

    Здравствуйте, Роман.
    Я не проверял.
    Принципиальная разница в том, что в 2016 нет отдельной роли Client Access. Как следствие, условие « if((get-exchangeserver $servername).serverrole -match «Mailbox») « не нужно, весь набор командлетов должен отрабатывать на каждом узле DAG.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *