Office 365 Reporting Web サービスの試し方

Office 365 Reporting Web Service を簡単に試す方法はありませんが、PowerShell を使用することで比較的簡単に動作を確認できます。紹介するのはメッセージ追跡ログの取得方法のみですが、同じ要領で他のレポートも取得できます。

PowerShell で試す

  1. Windows PowerShell を起動します。
  2. 以下のようにコマンドを実行します。認証ダイアログが表示されたら Office 365 の管理者の資格情報を入力してください。ここでは検索条件として差出人のメール アドレスを指定しているので、適宜変更してください。
$Credential = Get-Credential
(Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/?`$filter=SenderAddress eq 'User01@contoso.onmicrosoft.com'" -Credential $Credential).content.properties | select @{n="Received"; e={$_.Received."#text".Split('.')[0]}}, SenderAddress, RecipientAddress,Subject,Status | ft
  1. 実行結果として、Get-MessageTrace コマンド相当の内容が取得できたことを確認します。
  2. 日付を指定するには以下のようにコマンドを実行します。
(Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/?`$filter=StartDate eq datetime'2019-07-18T00:00:00Z' and EndDate eq datetime'2019-07-19T00:00:00Z'" -Credential $Credential).content.properties  | select @{n="Received"; e={$_.Received."#text".Split('.')[0]}}, SenderAddress, RecipientAddress,Subject,Status | ft
  1. Get-MessageTraceDetail コマンド相当の内容を取得するには、改めリクエストを作成する必要があります。以下のコマンドを実行して、URL 生成関数を定義します。
function Get-MessageTraceDetailUrl {
    param (
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [System.Xml.XmlLinkedNode]$MessageTraceEntry,
        [switch]$Escape
    )

    $MessageTraceId = $MessageTraceEntry.MessageTraceId.InnerText
    $RecipientAddress = $MessageTraceEntry.RecipientAddress
    $SenderAddress = $MessageTraceEntry.SenderAddress
    $StartDate = $MessageTraceEntry.StartDate.InnerText
    $EndDate = $MessageTraceEntry.EndDate.InnerText

    $URL = "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTraceDetail?`$filter=MessageTraceId eq guid'$MessageTraceId' and RecipientAddress eq '$RecipientAddress' and SenderAddress eq '$SenderAddress' and StartDate eq datetime'$StartDate' and EndDate eq datetime'$EndDate'"

    if ($Escape) {
        $URL = $URL.Replace("`$", "``$")
    }

    $URL | clip

    Write-Host "URL was copied to your clipboard."

    return $URL
}
  1. まずは Get-MessageTrace コマンド相当のログを変数に格納します。以下のようにコマンドを実行します。
$MessageTrace = Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/" -Credential $Credential
  1. 以下のようにコマンドを実行して、Get-MessageTrace コマンドのログの 1 件目のメッセージに対する Get-MessageTraceDetail コマンド相当のリクエストの URL を生成します。
$MessageTrace.Content.Properties[0] | Get-MessageTraceDetailUrl -Escape
  1. 生成した URL を使用して、以下のようにコマンドを実行します。
(Invoke-RestMethod "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTraceDetail?`$filter=MessageTraceId eq guid'e020bee3-7367-434d-c438-08d70c2fe364' and RecipientAddress eq 'user01@contoso.com' and SenderAddress eq 'user01@fabrikam.com' and StartDate eq datetime'2019-07-17T10:04:41.9725449Z' and EndDate eq datetime'2019-07-19T10:04:41.9725449Z'" -Credential $Credential).Content.Properties | select @{n="Date"; e={$_.Date.InnerText}}, Event, @{n="Detail"; e={if ($_.Detail.GetType().Name -eq "String") {$_.Detail} else {""}}}
  1. Get-MessageTraceDetail 相当の内容が取得できたことを確認します。