?

Log in

No account? Create an account

Заметки админа

Суров и справедлив

Previous Entry Share Next Entry
Exchange 2007 and PowerShell, отслеживание сообщений
Рыба
hroft_clone3
Продолжим. Еще задача. Отслеживание писем.


Q:Отследить как бродило письмо по организации, али просто найти конкретное письмо.
A: Рассмотрим следующий конвейер.

get-messagetrackinglog -Recipients:mmm@ddd.ru -Server "MailServerName" -Start "27.01.2012 0:00:00" -End "27.01.2012 16:52:00"|fl -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender >X:\[path]\trace.txt
get-messagetrackinglog -Recipients:mmm@ddd.ru -Server "MailServerName2" -Start "27.01.2012 0:00:00" -End "27.01.2012 16:52:00"|fl -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender >>X:\[path]\trace.txt

Опишем по подробнее.
Мы отдаем команду выдать список всех писем в диапазоне дат и времени -Start "27.01.2012 0:00:00" -End "27.01.2012 16:52:00" для пользователя с e-mail -Recipients:mmm@ddd.ru и смотрим на сервере -Server "MailServerName"
Здесь каждое письмо будет встречаться не один раз. Сначала оно будет принято сервером, потом передано следующему или помещено в почтовый ящик. Данных по каждому письму вываливается много, посему надо их сформатировать. Для этого передаем по конвейеру на format-list.
Будем выводить только конкретные поля из большого списка информации по каждому сообщению -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender. Но и тут спсиочек получится не маленький, что делать? Перенаправис вывод в файл файловой системы - >X:\[path]\trace.txt - понятно, что путь надо задать правильно, например X:\logs\maul\mmm\trace.txt Далее повторяем команду на остальных серверов организации. Для сбора в одном месте всех логов мы не создаем новых файлов с логами, а добавляем в конец существующего >>X:\[path]\trace.txt
Вот что мы получаем в этом файле.



Timestamp : 27.01.2012 0:05:44
ServerHostname : MailServerName
ClientHostname :
EventId : RECEIVE
Recipients : {mmm@ddd.ru}
MessageSubject : Message Subject
Sender : ddd@ccc.com

Timestamp : 27.01.2012 0:05:45
ServerHostname : MailServerName2
ClientHostname : MailServerName
EventId : DELIVER
Recipients : {mmm@ddd.ru}
MessageSubject : Message Subject
Sender : ddd@ccc.com



Теперь можно найти в файле нужное сообщение. Предположим мы его нашли.
Тепеь в параметры команды get-messagetrackinglog можно добавить -MessageSubject "Message Subject"
Таким образом, команда для выделения всех сообщений с конкретным Subject будет такой.

get-messagetrackinglog -Recipients:mmm@ddd.ru -Server "MailServerName2" -Start "27.01.2012 0:00:00" -End "27.01.2012 16:52:00" -MessageSubject "Message Subject"|fl -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender

Если переписка была большой,а "Re" и "Fw" из темы убирали, то можно отловить не пару-тройку сообщений на каждом сервере, а больше.
Тогда добавим в параметры вывода уникальные идентификаторы сообщения. Они неизменны в течении всей жизни сообщения - MessageId. Таким образом получим

fl -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender, MessageId

В файл вывода, в нруппу строк о каждом сообщении, добавится строка вида
MessageId : <1109125517214.1011053813843.437.3.291500CF@scheduler>

Теперь по этому ID мы сможем отследить сообщение абсолютно точно.
get-messagetrackinglog -Recipients:mmm@ddd.ru -Server "MailServerName2" -Start "27.01.2012 0:00:00" -End "27.01.2012 16:52:00" -MessageId "1109125517214.1011053813843.437.3.291500CF@scheduler"|fl -Property Timestamp, ServerHostName, ClientHostname, EventId, Recipients,MessageSubject, Sender, MessageId >X:\[path]\trace.txt

Обратим внимание, я убрал поиск по теме, оставил только MessageID ... для всех серверов компании этот ID будет один.
Соответственно, пишем аналогичную строку для всех серверов и находим как письмо бродило и где застряло, если такое произошло.
Не забываем, что переадресация вывода ">" - создает и/или перезаписывает указанный файл, а ">>" добавляет к существующему.