Как проверить состояние сервисов на всех серверах Exchange Server 2010 в организации?

Как проверить состояние сервисов на всех серверах Exchange Server 2010 в организации?

Время от времени возникают ситуации, когда администратору  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. спасибо Васе Гусеву за помощь в отладке скрипта и ценные мысли. 🙂

Связанные записи:


, ,