Вы можете использовать командлет Get-MessageTrackingLog в оболочке управления Exchange (Exchange Management Shell) для анализа потока электронной почты, форензики сообщений и получения различной информации о сообщениях, отправленных или полученных конкретным почтовым ящиком в вашей электронной почтовой организации. В этой статье я покажу несколько примеров однострочных команд PowerShell, которые я часто использую для отслеживания сообщений на серверах Exchange 2016/2013/2010 и Office 365 (Exchange Online).
Позвольте мне напомнить вам, что журналы передачи Exchange находятся в каталоге %ExchangeInstallPath%\TransportRoles\Logs\MessageTracking.
И наиболее эффективным и гибким способом анализа журналов отслеживания сообщений в Exchange является использование командлета Get-MessageTrackingLog.
Прежде всего, рассмотрим основные параметры командлета Get-MessageTrackingLog, которые вы можете использовать для фильтрации событий в журналах. Следующие параметры командлета используются наиболее часто:
- Отправитель (Sender) – поиск по отправителю;
- Получатели (Recipients) – поиск по получателю;
- Сервер (Server) – поиск на конкретном транспортном сервере;
- Начало («11/30/2019 08:00:00») — Конец («12/18/2019 21:00:00») – поиск в определенный период времени;
- Тема сообщения (MessageSubject) – поиск по теме сообщения;
- Идентификатор события (EventID) – поиск по событию Exchange (как правило, используются следующие коды: RECEIVE, SEND, FAIL, DSN, DELIVER, BADMAIL, RESOLVE, EXPAND, REDIRECT, TRANSFER, SUBMIT, POISONMESSAGE, DEFER);
- Идентификатор сообщения (messageID) – отслеживание по идентификатору сообщения.
Если вы запустите командлет Get-MessageTrackingLog без каких-либо параметров, будут отображены все события из журналов передачи Exchange за последние 30 дней. Командлет отображает только последние 1 000 событий. Для удаления этого ограничения используйте параметр –ResultSize Unlimited. (Не рекомендуется делать это без дополнительных параметров фильтрации из-за потенциально высокой нагрузки на ваш транспортный сервер.)
Вы можете отображать информацию о событиях Exchange постранично с использованием этой команды:
Get-MessageTrackingLog | Out-Host –Paging
Для отображения данных в формате таблицы и настройки ширины колонок используется командлет Format-Table:
powershellCopy code
Get-MessageTrackingLog | Format-Table –AutoSize
Если в вашей организации Exchange используются несколько серверов Hub Transport, вам потребуется указать имя сервера для поиска в качестве аргумента параметра –Server. Или выполните команду отслеживания сообщений для каждого из серверов Hub Transport с использованием оператора «pipe» (|):
powershellCopy code
Get-TransportServer | Get-MessageTrackingLog
Давайте отобразим все электронные письма за последние 24 часа ((Get-Date).AddHours(-24)), в которых указан получатель из домена @gmail.com:
powershellCopy code
Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize unlimited | where {[string]$_.recipients -like "*@gmail.com"}
Чтобы отобразить все электронные письма, отправленные конкретным пользователем через определенный сервер в заданный период времени, используйте следующую команду (в отчете будут отображены только конкретные поля отслеживания):
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@
hellit.ru
” –server rome-hub-01 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" | select-object Timestamp, Sender, Recipients, MessageSubject, EventId | ft
Давайте найдем все электронные письма, отправленные одним пользователем другому, и экспортируем результаты поиска в CSV-файл:
Get-MessageTrackingLog -Sender "cmansion@
hellit.ru
" -Recipients "amorato@woshub.com" -ResultSize unlimited –server rome-hub-01 | Select-Object Timestamp, Sender, {$_.recipients}, MessageSubject | Export-Csv -Path "C:\Export\exchange\exchange_tracking_logs.csv" -Encoding Default -Delimiter ";"
Вы также можете искать по теме сообщения. Чтобы отобразить все письма с словом «test» в поле темы, выполните следующую команду. (Чтобы отобразить результаты в отдельном графическом окне в виде таблицы с удобной сортировкой, фильтрацией и поиском, вы можете использовать командлет Out-GridView.)
Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited –server rome-hub-01 | Select-Object Timestamp, Sender, {$_.recipients}, MessageSubject | Out-GridView
Вы можете выполнять поиск по конкретному идентификатору сообщения (вы можете получить его из заголовка сообщения в Outlook):
Get-MessageTrackingLog -messageID "41A4321C3543314FFFFF23122F2BDB7ABD00342@rome-hub-01.hellit.ru" -ResultSize unlimited –server rome-hub-01 | Select-Object Timestamp, Sender, {$_.recipients}, MessageSubject
Чтобы подсчитать количество входящих электронных сообщений для конкретного почтового ящика за последние 7 дней, выполните следующую команду:
(Get-MessageTrackingLog -EventID "RECEIVE" -Recipients "amorato@
hellit.ru
" -ResultSize unlimited).Count
Вы также можете отображать более интересную статистику по сообщениям. Например, вы хотите узнать, сколько электронных писем от разных отправителей с домена gmail.com было получено пользователями вашей компании за последние 5 дней (мы отобразим общее количество писем, отправленных каждым внешним отправителем):
Get-MessageTrackingLog -EventId "Receive" -Start (Get-Date).AddDays(-5) -ResultSize Unlimited | Where-Object {$_.Sender -like "*@gmail.com"} | Group-Object Sender | Sort-Object Count -Descending | Format-Table *
Office 365 позволяет выполнять поиск журналов отслеживания сообщений из центра администрирования Exchange (Exchange Admin Center, EAC). Перейдите в раздел «Поток почты» -> «Трассировка сообщений». Заполните поля для поиска. Фактически это веб-интерфейс для командлета Get-MessageTrackingLog, который позволяет пользователю создавать команды отслеживания PowerShell в простой веб-форме.
Рассмотренные выше методы помогут вам получить статистику об отправленных и полученных сообщениях в вашей системе Exchange и диагностировать различные проблемы с передачей электронной почты.