Мониторинг состояния индекса MS Exchange с помощью скрипта на Powershell

Мы предоставляем услуги удаленного администрирования серверов

Мониторинг состояния индекса MS Exchange с помощью скрипта на Powershell

Обновлено и опубликовано Опубликовано:

Тематические термины: Exchange, Powershell.

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

Описанный скрипт, позволит проверить корректность индекса и, в случае проблем, отправить письмо администратору.

Подготовка

Перед запуском скрипта открываем powershell и выполняем:

read-host -assecurestring | convertfrom-securestring | out-file C:\Scripts\password.txt

Система запросит ввести пароль — введите пароль администратора Exchange (пользователя, из под которого будем подключаться к почтовому серверу); после данный пароль будет сохранен в виде хэш-суммы в файл C:\Scripts\password.txt.

Пример скрипта

  1. $username = «admins24\administrator»
  2. $password = cat C:\Scripts\password.txt | convertto-securestring
  3. $base_failed = »
  4.  
  5. $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
  6. $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mx.admins24.com/powershell -Credential $cred
  7. Import-PSSession $session
  8.  
  9. function Send-Alert ($bodyMessage) {
  10.     $it = «Дмитрий Моск <[email protected]
  11.     $from = «Служба проверки индексации почты <[email protected]
  12.     $enc = New-Object System.Text.utf8encoding
  13.     Send-MailMessage -to $it -from $from -Subject «Проблема с индексом Exchange» -bodyAsHTML $bodyMessage -smtpServer mx.admins24.com -Encoding $enc
  14. }
  15.  
  16. (Get-DatabaseAvailabilityGroup) | ForEach {
  17.     $_.Servers | ForEach {
  18.         Get-MailboxDatabaseCopyStatus -Server $_ | Select Name,ContentIndexState | ForEach-Object {
  19.             if ($_.ContentIndexState -ne ‘Healthy’) {
  20.                 $name = $_.Name
  21.                 $contentIndexState = $_.ContentIndexState
  22.                 $base_failed += «$name : $contentIndexState<br>»
  23.             }
  24.         }
  25.     }
  26. }
  27.  
  28. if ($base_failed.Count -gt 0) {
  29.     Send-Alert $base_failed
  30. }

Описание скрипта

1Переменная, содержащая имя пользователя, под которым подключаемся к Exchange.
2Пароль пользователя Exchange.
3Определяем пустую переменную — в нее будем помещать базы с проблемами.
5 — 7Подключаемся к консоли Exchange, используя логин и пароль, определенные на строках 1 и 2. mx.admins24.com — имя сервера Exchange.
9 — 14Функция отправки сообщения.
10Переменная с email адресом администратора, которому будут отправляться уведомления.
11Адрес, от которого отправляются письма.
12Кодировка сообщения.
13Собственно, отправка письма функцией Send-MailMessage. В качестве текста сообщения берется переменная $bodyMessage, значение для которой передается функции.
16 — 26Поиск всех баз данных и определение их состояния. Предусмотрено использование DAG-групп. Если последние не используются, скрипт можно немного сократить, оставив строки 18 — 24, а также заменив $_ в 18-й строке на имя сервера Exchange.
16Получаем все группы DAG.
17Получаем список всех серверов Exchange с DAG группами.
18Запрашиваем статус всех баз, которые находятся на сервере $_.
19Проверяем условие, если статус не в рабочем состоянии.
20 — 21Определяем переменные и записываем в них значения имени базы и состояния.
22Добавляем в переменную $base_failed строку с именем базы и ее состоянием.
28 — 30Если переменная $base_failed не пустая, выполняем функцию Send-Alert, то есть, отправляем сообщение.

   Мы принимаем