メールフローの問題を把握したり、見つけにくいメッセージを追跡したりするには、特にExchange Server環境ではPowerShellの魔法のような機能が不可欠です。Get -MessageTrackingLogコマンドレットはまさにその頼みの綱です。トランスポートログを精査し、誰がいつ誰に何を送信したかを確認できます。しかし、ログが に保存され%ExchangeInstallPath%TransportRoles\Logs\MessageTracking、デフォルトの出力が過去30日間または1, 000件に制限されているため、迷路のように感じることもあります。だからこそ、適切なパラメーターとフィルターの使い方を知ることが不可欠です。これにより、大量のメッセージに溺れたり、重要な情報を見逃したりすることを防ぐことができます。
Sender、Recipients、Server 、日付範囲といった主要なパラメータの使い方を習得すれば、メッセージの追跡がはるかに簡単になります。例えば、過去1日間に受信したすべてのGmailメッセージを表示したい場合は、 と を使って期間を設定することで-Start、-ResultSize unlimited見逃しを回避できます。特定のユーザーやサーバーからのメッセージを探している場合は、すぐにフィルタリングすることでログを管理しやすくなり、分析を迅速化できます。 を使ってコマンドを実行すると、| Out-Host –Paging大量の結果をページングしたり、 を使ってフォーマットすることでFormat-Table –AutoSizeデータをより読みやすくしたりできます。
ある設定では、フィルターを2、3個使うだけで問題なく動作しましたが、別の設定では、はるかに時間がかかったり、絞り込みが必要になったりしました。これは当然のことながら、Exchange では特に混雑した環境では、少し扱いにくい部分があります。動作が遅い、または結果が表示されない場合は、日付範囲を確認するか、 を使ってコマンドを実行してみてください-ResultSize unlimited。また、結果をCSV形式でエクスポートして、後でより詳細な分析を行うこともできます。これは、根深い問題の診断に非常に役立ちます。
Exchangeでのメール追跡とログ分析を修正する方法
PowerShell を使用して詳細なメッセージ追跡を行う
- Exchange 管理シェルを開くか、PowerShell で Office 365 を管理する場合はリモートで接続します。
- 次のようなコマンドを実行します。
Get-MessageTrackingLog -Start (Get-Date).AddDays(-1) -ResultSize unlimited | where {$_.recipients -like "*@gmail.com"}過去24時間以内にGmailアドレス宛に送信されたすべてのメール受信履歴を取得します。特定のドメインの最近のアクティビティを確認したい場合に便利です。
- 特定のメッセージを検索する必要がある場合は、以下を使用します。
Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited | Select-Object Timestamp, Sender, Recipients, MessageSubject | out-gridviewこれは GUI ウィンドウにポップアップ表示され、オンザフライで並べ替えやフィルタリングができるので便利です。
- または、電子メール ヘッダーから取得できるメッセージ ID の場合は、次のようにします。
Get-MessageTrackingLog -messageID "" -ResultSize unlimited そのメッセージを正確に追跡していることを確認します。
日付、送信者、受信者でフィルタリングすると、より良い結果が得られます
- 過去 1 週間の送信者からのメッセージの合計数を確認するには:
(Get-MessageTrackingLog -EventID "RECEIVE" -Recipients "[email protected]" -ResultSize unlimited).Countこれは、特定の時間内にユーザーまたはサーバーがどの程度忙しかったかを測定するのに役立ちます。
- または、特定の期間に特定のサーバー経由でユーザーが送信したすべてのメールを検索する場合:
Get-MessageTrackingLog -ResultSize unlimited -Sender "[email protected]" -Server serverName -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" | select-object Timestamp, Sender, Recipients, MessageSubject, EventId | ftこれにより、検索範囲が大幅に絞り込まれます。
結果をエクスポートして後で分析する
- 次の方法でデータをエクスポートします:
Get-MessageTrackingLog -Sender "[email protected]" -Recipients "[email protected]" -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 ";"これで、特に Excel やその他のツールで簡単に調べられる CSV が手に入りました。
メッセージ追跡には組み込みの Office 365 Web インターフェイスを使用する
- Office 365のExchange管理センターで、「メールフロー」>「メッセージ追跡」に移動します。フィルターを入力して検索を実行します。これは基本的にPowerShellコマンドのGUI版で、コマンドラインに慣れていない方でも非常にシンプルです。このインターフェースを使えば、スクリプトを細かく操作することなく、最近のメッセージの高レベルレポートを生成・表示できます。
結局のところ、重要なのはフィルターを知り、それらを効果的に組み合わせることです。配信の問題のトラブルシューティング、監査のための統計情報の収集、あるいは単なる好奇心を満たすためなど、これらの方法はメッセージログを詳しく調べるのに役立ちます。ただし、ある程度の試行錯誤は覚悟しておいてください。確かに、Exchangeのログは時々面倒ですが、これらのコツを使えば、大抵は目的のものを見つけることができます。
まとめ
- PowerShell のGet-MessageTrackingLogは、Exchange ログを調べるのに最適です。
- 送信者、受信者、日付、メッセージの件名でフィルタリングすると、結果をすばやく絞り込むことができます。
- ページ区切り機能やエクスポート機能を使用すると、大規模なデータ セットの管理が容易になります。
- Office 365 Web メッセージ トレースは、便利な GUI の代替手段です。
まとめ
これらの方法が実際のトラブルシューティングに役立つことを願っています。時には、少しの忍耐と適切なフィルターの組み合わせで問題が解決することもあります。特に混雑したサーバーや膨大なログがある場合は、常に完璧とは限りませんが、少し練習すれば可能です。誰かの時間を節約できたり、少なくとも正しい方向を指し示したりできれば幸いです。