Время от времени возникают ситуации, когда администратору Exchange Server 2010 нужно быстро убедиться в том, что его система работает нормально. В большинстве случаев хватает нескольких проверок — состояние служб и очередей, баз сообщений, отработка коммандлетов Test-*.
Как быстро узнать, все ли службы Exchange на всех серверах запущены и нормально работают? Для этого существует встроенный командлет Test-ServiceHealth. А если у вас несколько серверов, да еще Вы хотите вывод на экран сделать поудобнее, то можно воспользоваться следующим сценарием.
Get-ExchangeServer |where {$_.AdminDisplayVersion -like "*14*"}| foreach{ $srv = $_.Name; Test-ServiceHealth -server $_.Name} | where {$_.RequiredServicesRunning -eq $False } | format-table @{name="Server"; expression={$srv}},role,servicesnotrunning -autosize
Вывод команды будет выглядеть примерно так.
Server Role ServicesNotRunning ------ ---- ------------------ EX01 Mailbox Server Role {MSExchangeIS, MSExchangeMailboxAssistants, MSExchangeMailSubmission EX02 Client Access Server Role {MSExchangeAB, MSExchangeFBA, MSExchangeFDS EX03 Hub Transport Server Role {MSExchangeEdgeSync, MSExchangeServiceHost, MSExchangeTransport
Мы видим, что на серверах не запущены некоторые сервисы Microsoft Exchange, а также роль сервера, которая не работает. Если информация после выполнения скрипта не отображается, то это значит, что все сервисы запущены. Давайте рассмотрим повнимательнее, как этот скрипт работает.
Get-ExchangeServer | where {$_.AdminDisplayVersion -like «*14*»} Отбираем объекты Exchange Server 2010. В системе могут быть серверы Exchange 2007, с которыми этот скрипт не работает.
foreach{ $srv = $_.Name; Test-ServiceHealth -server $_.Name} для каждого объекта Exchange Server, полученного по конвейеру, сценарий выполняет блок команд. Переменной $srv присваивается имя сервера для использования в команде вывода на экран. Командлет Test-ServiceHealth с параметром -server тестирует сервисы на текущем сервере и передаёт в конвейер информацию о результатах теста.
where {$_.RequiredServicesRunning -eq $False } выбираем результаты в которых не запущены службы.
ft @{name=»Server»; expression={$srv}},role,servicesnotrunning -autosize выводим на экран содержимое переменной $srv в столбце Server и столбцы role, servicesnotrunning.
Конечно мониторинг за системой должен быть настроен с помощью SC Operations Manager или другого ПО, но я люблю пользоваться еще и сценариями.
Часто используемые сценарии я храню в текстовом файле на сервере и при необходимости просто их копирую оттуда в EMS и запускаю. Хотя есть масса вариантов с использованием ISE или PowerGUI. Этому я посвящу этому целый вебкаст после возвращения с TechEd 2011.
p.s. спасибо Васе Гусеву за помощь в отладке скрипта и ценные мысли. 🙂