Каждому администратору любой ИТ-системы крайне неприятно узнавать о проблемах в ней от пользователей, гораздо лучше ответить «Мы уже в курсе, работаем» 🙂
И что важно — при этом не соврать 🙂
Конкретно в Exchange (да и в любой почтовой системе) увеличение какой-либо из почтовых очередей является признаком проблем: будь-то отсутствие канала с Интернет, влияние back preasure и т.п.

На одной из площадок в качестве средства мониторинга используется ПО Advanced Host Monitor, которое при установленном на хосте агенте позволяет выполнять произвольные команды и внешние программы. Именно этим объясняется кривость скрипта, а именно cmd вызывает powershell. Изначально хотелось, чтобы скрипт выполнялся прямо из агента, но оказалось, что по неизвестным мне причинам, powershell внутри не отрабатывает. Поэтому скрипт проверяет состояние очередей и пишет результат в файл, содержимое которого уже смотрит Host Monitor.

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

Сам скрипт checkExchQueue.cmd элементарен:

@echo off
set res=0
FOR /F "tokens=4 skip=2 delims= " %%A IN ('C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -command ". 'D:\Program Files\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; Get-Queue -Filter {MessageCount -gt 50}"') DO if %%A GEQ 50 SET res=%%A
 
IF "%res%"=="0" goto ok
 
echo Bad > c:\checkExchQueue.status
exit 1
 
:ok
echo Ok > c:\checkExchQueue.status
rem pause
exit 2

Понятно, что можно сразу сделать на powershell, более нормальный выбор строки, добавить передачу размера очередей и т.п.
Халтурный скрипт вообщем 🙂 Зато простой.

Ещё нюанс: по умолчанию powershell, вернее RemoteExchange.ps1 выполняющий подключение к Exchange пишет много ненужной информации (банер приветствия, тип дня), чтобы отключить этот вывод необходимо закомментировать несколько строчек:
1. \Exchange Server\V14\Bin\RemoteExchange.ps1
#get-exbanner (строка 335)
#get-tip  (строка 336)

2. \Exchange Server\V14\Bin\ConnectFunctions.ps1
#set-variable VerbosePreference -value Continue (строки 13, 79, 87)

Номера строк действительны для Exchange 2010 SP1 Rollup 4.

PS: В почтовом сервере MDaemon мониторить очереди совсем элементарно: в нём очередь, это папка с файлами-сообщениями, т.е. просто ставиться монитор на количество файлов в нужной папке.