可以使用 Exchange 命令行管理程序中的Get-MessageTrackingLog cmdlet 來分析郵件流、郵件取證並獲取有關電子郵件組織中特定郵箱發送或接收的郵件的不同信息。在本文中,我將展示幾個 PowerShell 單行命令示例,我經常使用這些命令來跟蹤 Exchange Server 2016/2013/2010 和 Office 365 (Exchange Online) 上的消息。
讓我提醒您,Exchange 傳輸日志位於該%ExchangeInstallPath%TransportRoles\Logs\MessageTracking文件夾中。在 Exchange 中分析郵件跟蹤日志的最有效和最靈活的方法是使用 Get-MessageTrackingLog cmdlet。
首先,考慮可用於過濾日志中事件的主要 Get-MessageTrackingLog 參數。以下 cmdlet 參數最常用:
Sender——按發件人搜索;
recipients——按收件人搜索;
server——在特定的傳輸服務器上搜索;
start “11/30/2019 08:00:00” -end“ 12/18/2019 21:00:00”——搜索具體時間段;
MessageSubject — 按消息主題搜索;
EventID – 按 Exchange 事件搜索(通常使用以下代碼:RECEIVE、SEND、FAIL、DSN、DELIVER、BADMAIL、RESOLVE、EXPAND、REDIRECT、TRANSFER、SUBMIT、POISONMESSAGE、DEFER);
messageID – 按消息 ID 跟蹤。
如果在不帶任何參數的情況下運行 Get-MessageTrackingLog cmdlet,則將顯示過去 30 天 Exchange 傳輸日志中的所有事件。該 cmdlet 僅顯示最后 1,000 個事件。要刪除此限制,請使用–ResultSize Unlimited參數。(由於傳輸服務器上潛在的高負載,不建議在沒有一些額外的過濾器參數的情況下執行此操作。)
您可以使用以下命令逐頁顯示有關 Exchange 事件的信息:
Get-MessageTrackingLog | Out-Host –Paging
例子1
-顯示過去 24 小時 ( (Get-Date).AddHours(-24)) 的所有電子郵件,其中指定了來自 @gmail.com 域的收件人:
Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize unlimited | where {[string]$_.recipients -like "*@gmail.com"}
例子2
-要顯示特定用戶在給定時間段內通過特定服務器發送的所有電子郵件
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@china.com” –server rome1 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" |select-object Timestamp,Sender,Recipients,MessageSubject,EventId|ft
或者
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@china.com” –server rome1 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" |fl
例子3
-我們查找一個用戶發送給另一個用戶的所有電子郵件,並將搜索結果導出到 CSV 文件中
Get-MessageTrackingLog -Sender "cmansion@china.com" -Recipients "amorato@china.com" -ResultSize unlimited –server rome | Select-Object Timestamp,Sender,{$_.recipients},MessageSubject | Export-Csv -Path "C:\Export\exchange\exchange_tracking_logs.csv" -Encoding Default -Delimiter ";"
例子4
-可以按郵件主題進行搜索。要在主題字段中顯示所有帶有“test”字樣的電子郵件,請運行以下命令。(要在單獨的圖形窗口中將結果顯示為具有方便排序、過濾和搜索功能的表格,
Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited –server rome | Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject | out-gridview
例子5
-您可以通過特定的郵件 ID 進行搜索(您可以從 Outlook 中的郵件標題中獲取):
Get-MessageTrackingLog -messageID "41A4321C3543314FFFFF23122F2BDB7ABD00342@rome-hub-01.woshub.com" -ResultSize unlimited –server rome-hub-01| Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject
例子6
查看那個郵件接收過程中因為那個郵件流阻擋
$mail= Get-MessageTrackingLog -Server rome -Start "2022/1/18 10:0:0" -End "2022/1/18 20:00:00 " -Sender xiang.zhang@china.com -Recipients zhe.chen@china.com
看 #AGENTINFO 的是那一條
$mail[-4].EventData
查看 AGENTINFO的數據 [-4]表示 #AGENTINFO 在倒數第四條
在顯示的數據中看ruleid 這個id號基本是最后一條。在郵件發送之后,郵件會依照順序匹配所有郵件流如果,沒有成功則會阻止掉,所以一般都只看最后一條ruleid
Get-TransportRule 099dce9d-9782-4494-9208-f24d6f991a54