メッセージ トレースと外部受信者への Exchange オンライン電子メールのレポート作成
組織外でメールを送信しているユーザーを監視する
メッセージトレースに関する質問は、先週、 Facebook Office 365 Technical Discussions group:
“経営陣から、社外に送信したメールの数、受信者、日時を報告する必要がある一連のユーザーについて報告するように要求されています."
私の最初の反応は、関係する経営陣は20人半ばの信者でなければならないということでした。番目 世紀の時間と運動の方法論。さらなる反省は、この要求が、疑わしい不正行為に対する何らかの形の調査によって正当化されるかもしれないという点に私を導きました。うまくいけば、経営陣は、このようにユーザーアクティビティを報告することについて、法的および人事的なアドバイスを受けています。彼らがそうすると仮定すると、それは解決すべき興味深い技術的問題です。
メッセージ・トレースがデータを提供する
Exchange Online メッセージ トレースは、ソリューションの中核を成すものです。Exchange Online トランスポート システム内のメッセージのパスは、 Exchange 管理センター 又は マイクロソフト 365 ディフェンダーポータル.メッセージ トレース データは、PowerShell から メッセージトレースの取得 コマンドレットは、ここで使用するものです。
Exchange Online は、最大 90 日間メッセージ追跡データを保持します。ただし、オンラインで利用できるのは過去 10 日間のみです。外部の受信者に送信されたメッセージを追跡するために、メッセージトレースデータを調査して、見つかったものを報告できます。メッセージ トレースの便利な目的はこれだけではありません。たとえば、配布リストの電子メール アクティビティを追跡することで、配布リストのアクティブな状態を把握できます。
ターゲット メールボックスの識別
まず、監視する対象メールボックスのセットを特定する必要があります。最も簡単な方法は、 Get-ExoMailbox コマンドレットを使用して、特定の部門に属しているか、別の属性に一致するメールボックスのセットを検索します。たとえば、次のコマンドは、Office プロパティが Boston に設定されているすべてのメールボックスを返します。
[array]$Mbx = Get-EXOMailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited -Filter {Office -eq 'Boston'} -Properties Office
調査の性質上、クエリ対象として適切なプロパティが見つからない場合があります。この状況では、メールボックスで使用できる 15 のカスタム属性の 1 つを使用することが、ターゲット メールボックスをマークする適切な方法です。
ターゲット メールボックスを含む配布グループを作成することで、別の方法を使用することにしました。グループの所有権が割り当てられたアカウントがレポートを受信します。ユーザーが新しいグループを見るのを避けるために、私はそれをアドレスリストから隠し、電子メールアドレスを推測しにくくしました:
New-DistributionGroup -Name "Monitored Users" -Alias Monitored.Users -DisplayName "Users External Email Monotoring" -IgnoreNamingPolicy Set-DistributionGroup -Identity Monitored.Users -HiddenFromAddressListsEnabled $True -ManagedBy Compliance.Administrator -PrimarySmtpAddress Monitored.Users.Investigation101@office365itpros.com Add-DistributionGroupMember -Identity Monitored.Users -Member Kim.Akers Add-DistributionGroupMember -Identity Monitored.Users -Member Terry.Hegarty Add-DistributionGroupMember -Identity Monitored.Users -Member Chris.Bishop Add-DistributionGroupMember -Identity Monitored.Users -Member James.Ryan
PowerShell でのメッセージ トレース
一連のターゲット メールボックスを使用すると、メッセージ トレースを実行して、外部電子メールの詳細を見つけることができます。ここでは、各メールボックスのメッセージ追跡を実行し、受信者のアドレスをチェックして外部電子メールのレコードを抽出するために使用したループを示します。PowerShell リストには、後で使用するためにメッセージの詳細が格納されます。
Write-Host ("Checking external email for {0} mailboxes" -f $Users.count) $Report = [System.Collections.Generic.List[Object]]::new() ForEach ($User in $Users) { Write-Host ("Checking messages sent by {0}" -f $User.DisplayName) # Get message information for the last ten days and filter so that we end up with just external addresses [string]$SenderAddress = $User.PrimarySmtpAddress [array]$Messages = Get-MessageTrace -StartDate $StartDate -EndDate $EndDate -SenderAddress $SenderAddress -Status Delivered | ? {$_.RecipientAddress -notlike "*@Office365itpros*"} ForEach ($M in $Messages) { $ReportLine = [PSCustomObject][Ordered]@{ Date = Get-Date($M.Received) -format g User = $M.SenderAddress Recipient = $M.RecipientAddress Subject = $M.Subject MessageId = $M.MessageId } $Report.Add($ReportLine) } #End Foreach messages } # End ForEach Users
電子メールによる管理への通知
この要求では、経営陣が外部の電子メールアクティビティのレポートをどのように受信するかは特に言及されていませんでした。データから出力を作成し、CSV ファイルまたは HTML ドキュメントとして提供するのは簡単です。この演習の目的上 (および、 適切なコードがあります)、Microsoft Graph PowerShell SDK からのコマンドレットを使用してレポートを電子メールで送信します。
経営陣は、外部の受信者とメッセージのタイムスタンプについて知りたいと言います。また、メッセージの送信者とメッセージの件名も知りたいと思うので、メッセージの追跡から抽出された情報を取得し、HTML の本文パーツとして書式設定します。
次の手順では、メッセージを送信するメールボックス、受信者、および件名を選択します。ログインしているユーザーを使用して、配布リストを管理するユーザーにメッセージを送信します。または、これらの割り当てをハードコードすることもできます。ここに私がやったことがあります:
$MsgFrom = $O365Cred.UserName [string]$EmailRecipient = (Get-DistributionGroup -Identity Monitored.Users).ManagedBy [string]$EmailRecipientAddress = (Get-EXOMailbox -Identity $EmailRecipient).PrimarySmtpAddress $MsgSubject = "User External Email Report"
最後に、HTML 本文パーツを使用してメッセージ本文を作成し、 新規 MgUserMessage コマンドレットを使用して送信します。 Send-MgUserMessage.関連するコードは次のとおりです。
# Construct the message body $MessageBody = @{ content = "$($Body)" ContentType="html" } # Create a draft message in the signed-in user's mailbox $NewMessage = New-MgUserMessage -UserId $MsgFrom -Body $MessageBody -ToRecipients $EmailToRecipient -Subject $MsgSubject # Send the message Send-MgUserMessage -UserId $MsgFrom -MessageId $NewMessage.Id
図 1 は、マネージャーが受信したメッセージがどのように表示されるかを示しています。HTMLフォーマットは基本的なものであり、その必要性があればもっときれいにすることができます。

物事を機能させる
ユーザーの電子メール アクティビティを監視するという考えには同意しませんが、これはすべての Exchange Online テナントで使用できるメッセージ トレース情報を使用する興味深い例です。要求に対して合理的な応答を提供するため。他のスクリプトからのいくつかの PowerShell スニペットと組み合わせることで、数時間で完全に機能するソリューションを作成できます。開始するには、次の操作を行います。 GitHubからコードをダウンロードする.
Microsoft 365 テナント管理者が利用できるデータを活用する方法については、 Office 365 for IT プロフェッショナル 電子ブック。私たちは物事がどのように機能するかを理解するのが大好きです。
ディスカッション
コメント一覧
まだ、コメントがありません