===== Отслеживание сообщений ===== === Отслеживание сообщений через транспортные логи === Удобные команды, с помощью которых можно отслеживать логи сообщений. Последние 12 часов по отправителю: Get-MessageTrackingLog -Start (Get-Date).AddHours(-12) -ResultSize unlimited | where {[string]$_.sender -like "user@domain.ru"} Последние 12 часов по получателю: Get-MessageTrackingLog -Start (Get-Date).AddHours(-12) -ResultSize unlimited | where {[string]$_.recipients -like "username*"} По отправителю и получателю за последние 24 часа: Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize unlimited | where {[string]$_.sender -like "sender@domain.ru" -and [string]$_.recipients -like "recepient@domain.ru"} Конкретная дата по получателю: Get-MessageTrackingLog -Start "06/21/2024 00:00:01" -End "06/22/2024 00:00:01" -ResultSize unlimited | where {[string]$_.recipients -like "user*"} Вывести информацию с адресами клиентов для события RECEIVE из MessageTrackingLog Get-TransportService | ForEach-Object {Get-MessageTrackingLog -Start "06/21/2024 00:00:01" -End "06/22/2024 00:00:01" -ResultSize unlimited -EventId RECEIVE | where {[string]$_.recipients -like "user*"}} | Select-Object -Property Sender,Recipients,Timestamp,OriginalClientIp ---- === Поиск сообщений через Search-Mailbox === В некоторых случаях, к примеру, если штатная функция eDiscovery не работает, или не выполняеется командлет поиска по всей организации //New-MailboxSearch// (такое может случиться по разным причинам), нам может помочь циклический поиск по всем ящикам организации через search-mailbox. В данном примере мы выполним поиск по всем ящикам организации для //mailbox@mail.ru// как в качестве возможного отправителя и в качестве возможного получателя (для этого используется параметр //participants//), начиная с 2019-го года с полным уровнем логирования поиска (//LogLevel Full//) и отправим результаты в ящик Exchange //mailbox_results// - в папку //search_results_mailbox//. $allmbxinyourorg = Get-Mailbox -ResultSize unlimited Foreach ($mbx in $allmbxinyourorg) { Search-Mailbox -identity $mbx -SearchQuery '(participants: mailbox@mail.ru) AND received>"2019-01-01"' -TargetMailbox "mailbox_results" -TargetFolder "search_results_mailbox" -LogLevel Full } А в данном примере поищем упоминания слова //word// в теле письма или его теме. $allmbxinyourorg = Get-Mailbox -ResultSize unlimited Foreach ($mbx in $allmbxinyourorg) { Search-Mailbox -identity $mbx -SearchQuery '(Body:"word" OR Subject:"word")' -TargetMailbox "search_results_mailbox" -TargetFolder "search_results_folder" -LogLevel Full } Запросить всю внешнюю почту для конкретного ящика "user@contoso.com", исключая внутренний домен contoso.com (пользователь, как видно, принадлежит данному домену), можно командлетом, в котором сначала отрабатывается условие для получения всех входящих, исключая выделенный домен, а затем фильтруется исходящие (домен также исключается). search-mailbox -identity "user@contoso.com" -SearchQuery '((NOT from:"@contoso.com") AND (NOT from:"User*")) OR ((NOT to:"@contoso.com") AND (NOT to:"User*"))' -TargetMailbox "search_result_mailbox" -TargetFolder "search_results_folder" Запросы на экспорт могут копиться. Если требуется очистить ВСЕ запросы - это можно сделать так: get-mailboxexportrequest | Remove-MailboxExportRequest {{tag>Exchange Microsoft Mail PowerShell}}