Get-MessageTrackingLog відстеження повідомлень в журналах Exchange

Для аналізу транспортних журналів камері не вдається відстежити листів в Exchange можна використовувати командлет Get-MessageTrackingLog консолі Exchange Management Shell. У цій статті я перерахую приклади однорядкових PowerShell команд, які я часто використовую при пошуку і відстеження маршрутизації листів в Exchange Server 2016/2013/2010 і Office 365 (Exchange Online).

Нагадаю, що транспортні журнали Exchange зберігаються в каталозі % ExchangeInstallPath% TransportRoles \ Logs \ MessageTracking і найефективніший і гнучкий спосіб аналізу цих журналів при трекінг повідомлень в системі Exchange - саме використання командлет Get-MessageTrackingLog.

Перш за все розгляньте основні параметри командлета Get-MessageTrackingLog, які можна використовувати для фільтрації подій в журналах. Найчастіше використовуються наступні параметри команлета:

  • Sender - пошук по відправнику;
  • Recipients - пошук по одержувачу;
  • Server - пошук на певному транспортному сервері;
  • Start «02/30/2019 8:00:00» -End «02/31/2019 21:00:00" - пошук за певний проміжок часу;
  • MessageSubject - пошук по темі повідомлення;
  • EventID - пошук по коду події сервера (як правило використовуються коди RECEIVE, SEND, FAIL, DSN, DELIVER, BADMAIL, RESOLVE, EXPAND, REDIRECT, TRANSFER, SUBMIT, POISONMESSAGE, DEFER);
  • messageID - трекінг листи по його ID.

Якщо виконати командлет Get-MessageTrackingLog без параметрів, будуть виведені всі події з журналів Exchange за останні 30 днів. Добре, що при такому запуску командлет виводить тільки 1000 останніх подій. Щоб прибрати обмеження на кількість виведених подій, потрібно вказати параметр -ResultSize Unlimited (робити цього без вказівки додаткових параметрів фільтрації не рекомендується через можливу високим навантаженням на сервера).

Ви можете вивести інформацію про події Exchange в посторінковою формі за допомогою команди:

Get-MessageTrackingLog | Out-Host -Paging

Щоб уявити дані в табличній формі і вирівняти ширину колонок використовується командлет Format-Table:

Get-MessageTrackingLog | Format-Table -AutoSize

Якщо у вашій організації Exchange використовується кілька серверів Hub Transport, для пошуку в журналах серверів потрібно вказувати ім'я сервера в якості аргументу параметра -Server, або виконати команду пошуку для кожного сервера Hub Transport:

Get-TransportServer | Get-MessageTrackingLog

Виведемо всі листи за останні 12 годин ((Get-Date) .AddHours (-12)) В яких в якості отримувача вказано адресат з поштової системи @ gmail.com:

Get-MessageTrackingLog -Start (Get-Date) .AddHours (-12) -ResultSize unlimited | where [string] $ _. recipients -like "*@gmail.com"

Щоб вивести всі листи, відправлені певним користувачем за вказаний період через вказаний сервер (в звіт виведемо тільки певні поля):

Get-MessageTrackingLog -ResultSize unlimited -Sender "[email protected]" -server msk-hub-01 -Start "03/30/2019 8:00:00" -End "04/04/2019 21:00:00" | select-object Timestamp, Sender, Recipients, MessageSubject, EventId | ft

Знайдемо всі листи, відправлені одним користувачем іншому і вивантажимо результат в CSV файл:

Get-MessageTrackingLog -Sender "[email protected]" -Recipients "[email protected]" -ResultSize unlimited -server msk-hub-01 | Select-Object Timestamp, Sender, $ _. Recipients, MessageSubject | Export-Csv -Path "C: \ ps \ exchange \ msg_tracking_out.csv" -Encoding Default -Delimiter ";"

Пошук по темі листа. Для виведення всіх листи з темою, що містить фразу "test", виконайте наступну команду (щоб представити результати пошуку в окремій табличному графічному вікні зі зручними можливостями сортування, фільтрації та пошуку даних можна використовувати командлет out-gridview):

Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited -server msk-hub-01 | Select-Object Timestamp, Sender, $ _. Recipients, MessageSubject | out-gridview

Можна шукати по конкретному ідентифікатору повідомлення (наприклад, ви отримали його з службових заголовків листа в Outlook):

Get-MessageTrackingLog -messageID "[email protected]" -ResultSize unlimited -server msk-hub-01 | Select-Object Timestamp, Sender, $ _. Recipients, MessageSubject

Щоб порахувати кількість вхідних листів за останні 7 днів для конкретного ящика, виконайте:

(Get-MessageTrackingLog -EventID "RECEIVE" -Recipients "[email protected]" -ResultSize unlimited) .Count

Можна вивести статистику за листами з угрупованням. Наприклад, ви хочете побачити, скільки листів від різних відправників з домену mail.ru отримали користувачі вашої організації за 1 день (виведемо сумарна кількість відправлених листів кожним зовнішнім відправником):

Get-MessageTrackingLog -EventId "Receive" -Start (Get-Date) .AddDays (-1) -ResultSize Unlimited | Where-Object $ _. Sender -like "*@mail.ru" | Group-Object Sender | Sort-Object Count -Descending | Format-Table *

Для пошуку листів, які зберігаються в ящиках користувачів Exchange потрібно використовувати командлет Search-Mailbox.

У Office 365 є можливість пошуку по трекінг логам з веб-інтерфейсу Exchange Admin Center (EAC). Перейдіть в розділ Mail Flow -> Message Trace. Заповніть потрібні поля для пошуку. По суті це веб-інтерфейс для командлет Get-MessageTrackingLog, що дозволяє користувачеві в простій формі сформувати PowerShell команду для пошуку листів по журналам.

Розглянуті вище способи допоможуть вам отримати статистику надісланої та отриманої повідомленнях в системі Exchange і діагностувати проблеми з відправкою листів.