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