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

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

なお公式ドキュメントは以下にありますが、十分にメンテナンスが行われていないのでご注意ください。
Office 365 Reporting web service | Microsoft Docs
MessageTrace report | Microsoft Docs
MessageTraceDetail report | Microsoft Docs

[委任されたアクセス許可] を使用してアクセス トークンを取得する場合は [委任されたアクセス許可] を PowerShell で試すの手順を使用してください。[アプリケーションの許可] を使用してアクセス トークンを取得する場合は [アプリケーションの許可] を PowerShell で試すの手順を使用してください。アクセス トークンを取得出来たら、PowerShell で Office 365 Reporting Web サービスのリクエストを送信するの手順へ進んでください。基本認証を使用する場合は基本認証で試すの手順を使用してください。

[委任されたアクセス許可] を PowerShell で試す

  1. Azure Portal にサインインします。
  2. [Active Directory] – [アプリの登録] – [新規登録] をクリックします。
  3. [名前] に任意のアプリの名前を入力します。(例 : App01)
  4. [サポートされているアカウントの種類] から [この組織のディレクトリ内のアカウントのみ] を選択します。
  5. [リダイレクト URI] で [Web] を選択し、任意の URI を入力します。(例 : https://localhost/App01)
  6. [登録] をクリックします。
  7. 表示された [アプリケーション (クライアント) ID] の値を控えておきます。
  8. [管理] – [証明書とシークレット] – [クライアント シークレット] をクリックします。
  9. [新しいクライアント シークレット] をクリックします。
  10. [説明] に任意の説明を入力します。(例 : Key1)
  11. [有効期限] から任意の有効期限を選択します。(例 : 推奨: 6 か月)
  12. [追加] をクリックします。
  13. 表示されたクライアント シークレットの値を控えておきます。
  14. [管理] – [API のアクセス許可] をクリックします。
  15. [アクセス許可の追加] をクリックします。
  16. [所属する組織で使用している API] の中から [Office 365 Exchange Online] をクリックします。
  17. [委任されたアクセス許可] をクリックします。
  18. [ReportingWebService.Read] のチェックをオンにします。
  19. [アクセス許可の追加] をクリックします。
  20. 「https://login.microsoftonline.com/<テナント名>/oauth2/v2.0/authorize?response_type=code&client_id=<登録したアプリのアプリケーション (クライアント) ID>&redirect_uri=<登録したアプリのリダイレクト URI をエンコードしたもの>&scope=<https://outlook.office.com/.default をエンコードしたもの>&response_mode=query&prompt=login」のような URL を作り、ブラウザーでアクセスします。(例 : https://login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?response_type=code&client_id=9f9d462f-2558-49b9-9363-46baacee4811&redirect_uri=https%3a%2f%2flocalhost%2fApp01&scope=https%3a%2f%2foutlook.office.com%2f.default&response_mode=query&prompt=login)
  21. Exchange Online の管理者でサインインします。
  22. 登録したアプリのリダイレクト URI で始まる URL にリダイレクトされます。ページ自体が表示されなくても問題ありません。リダイレクトされた URL の code パラメータの値を控えます。例えばリダイレクトされた URL が「https://localhost/App01?code=0.AUkAMWMEbaVeBkOHro1R89zHHi9GnZ9YJblJk2NGuqzuSBFJAFA.AgABAAIAAAD–DLA3VO7QrddgJg7WevrAgDs_wQA9P9AjLEH9SaCVzNmSrQPFDrQTdpsTHHb4_-Mt-ANdD6a8zHfnP3IVpscTaQT9i9ZyNH9U7P8oAts88hmNsKSfU0JkcuPqMZtK4IIIz8pe_ioMDVFPPE7MZAntjcxP-JuoLdlOeEX3kllaHqPmBq7PwYBp9aE-9ZRnntpEaJv1LPozzW5HhQ8YuJGCtRJun2kspL_vc6dFTaz5mn5t4YUiFw1PzCtvrkBF9YAhKMAnIjP1cGbOHAlVRIQHx-xXAbRDe1ievVk89gl2HjCb1Alk28WiRlCjl_8q2rCMU7Pyp3YpyOt5VbJGewpntn1739b-v1VkZzU5jNngjk6gEWyDVkjM1DcPQOgbzgEpBw8RTtTNt5t1LVHp8OrdWoSl3ydgyqOs4N0YBGyfJoXtjj7m-sOaRKfLRHlzUwLRiwn4vqFMK6ufUBLeZsOiP98cha9GjE_dQ8LuqV9dhd0537d3VSq_nBx6vum_Okkpz9DVO3PFiZI8c3R6JRNp_kTfMjdgQSIj3bABCBxQ5A9dpPxoPNxkk8AyGD0Phsypbz6NVnSWp82EeXIzS0_t8Ac7zmnNibDt4rc5GGmVE6wJsKc2tLcoG8A_YalubWz2hTNzXjrgPL_5YvP&session_state=f6ccb6fa-bbc7-41df-baa7-dde68ccac6f5#」であれば「0.AUkAMWMEbaVeBkOHro1R89zHHi9GnZ9YJblJk2NGuqzuSBFJAFA.AgABAAIAAAD–DLA3VO7QrddgJg7WevrAgDs_wQA9P9AjLEH9SaCVzNmSrQPFDrQTdpsTHHb4_-Mt-ANdD6a8zHfnP3IVpscTaQT9i9ZyNH9U7P8oAts88hmNsKSfU0JkcuPqMZtK4IIIz8pe_ioMDVFPPE7MZAntjcxP-JuoLdlOeEX3kllaHqPmBq7PwYBp9aE-9ZRnntpEaJv1LPozzW5HhQ8YuJGCtRJun2kspL_vc6dFTaz5mn5t4YUiFw1PzCtvrkBF9YAhKMAnIjP1cGbOHAlVRIQHx-xXAbRDe1ievVk89gl2HjCb1Alk28WiRlCjl_8q2rCMU7Pyp3YpyOt5VbJGewpntn1739b-v1VkZzU5jNngjk6gEWyDVkjM1DcPQOgbzgEpBw8RTtTNt5t1LVHp8OrdWoSl3ydgyqOs4N0YBGyfJoXtjj7m-sOaRKfLRHlzUwLRiwn4vqFMK6ufUBLeZsOiP98cha9GjE_dQ8LuqV9dhd0537d3VSq_nBx6vum_Okkpz9DVO3PFiZI8c3R6JRNp_kTfMjdgQSIj3bABCBxQ5A9dpPxoPNxkk8AyGD0Phsypbz6NVnSWp82EeXIzS0_t8Ac7zmnNibDt4rc5GGmVE6wJsKc2tLcoG8A_YalubWz2hTNzXjrgPL_5YvP」です。
  23. PowerShell を起動します。
  24. 以下のようにコマンドを実行し、出力結果の access_token の値を控えておきます。
$Params = @{
  "grant_type" = "authorization_code"
  "redirect_uri" = "<登録したアプリのリダイレクト URI>"
  "client_id" = "<登録したアプリのアプリケーション (クライアント) ID>"
  "client_secret" = "<登録したアプリのクライアント シークレット>"
  "code" = "<先ほど取得した code>"
  "scope" = "https://outlook.office.com/.default"
}
Invoke-RestMethod -Uri "https://login.microsoftonline.com/<テナント名>/oauth2/v2.0/token" -Method "POST" -Body $Params

実行例)

$Params = @{
  "grant_type" = "authorization_code"
  "redirect_uri" = "https://localhost/App01"
  "client_id" = "9f9d462f-2558-49b9-9363-46baacee4811"
  "client_secret" = "3Hi8Q~553dE0VRVrgSENmjzQEYMq~wUYJpB.3bd0"
  "code" = "0.AUkAMWMEbaVeBkOHro1R89zHHi9GnZ9YJblJk2NGuqzuSBFJAFA.AgABAAIAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P9g_cSTR9-TnpNR0dKzaoy0xXqpLYuwfmoCpAqGMnI4Myx_gkBSsV-NOsdeG_pPVVA1s5sQvTDglR41bVpA-YoHA4zFShDyJiSSfqUS05rJ8d8LPjAI1UlN5dIrbp9_gyd6lxhHxI0M9RwKdAIZsiAkh5WutZzXL_8EgZExKGhbLvLPIGUtg2eGOh5P7pZBajenfa6bfwKQGsj7AknUASZqk-FJmM5lcgCd_NH_YWPxy2R-CL_m9dzwIpYQRnmbN32DguK_ISIrnZY4U1ZNxj3lajyXRJKoVa1u2nq1LmWr-7Y8i1CAXuir8cuHpeXs3W7e28x9EjB9kW_3xYxv6B0Cl3FcU7YtizzeYbljCBIUjOuD-vuTP3EgpHHUOLmp-84-LpWYWFNlk0CBz6lixt2perahhyVS5VAei4QCmFnHgdljD1JJOT_KxMZrsZeGnCCtyCPyn7Mctfow_wYi0MCm21XVxw3CKIOas-Po7YT1c9HaIlxYCD7LssnI_DafdeSam3Ax0wF3IGdh4jZq6yC4oHA7BfHOMGw2_Tk4tHgjc8Y9ThL5XJvhoiDxdZrpcMiznWq76rwf1XLrwAL_L0ZtyujxGnm5o-2w97MSN_rxZFX47vlqZOo"
  "scope" = "https://outlook.office.com/.default"
}
Invoke-RestMethod -Uri "https://login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/token" -Method "POST" -Body $Params

以上で [委任されたアクセス許可] でのアクセス トークンの取得が完了します。なお手順 20 以降は Authorization Code Flow でアクセス トークンを取得する処理です。必ずしも記載されているようにブラウザーと PowerShell を使わなければならない処理ではありませんので、知識がある方は MSAL を使用するなど別の方法でアクセス トークンを取得していただければ問題ありません。Azure AD へのアプリの登録も、機密クライアント アプリとして登録する手順となっていますが、パブリック クライアント アプリとしての登録でも問題ありません。本来、PowerShell から API を操作するのであればパブリック クライアント アプリとしての登録をすべきであると考えられますが、公式ドキュメントの記載が機密クライアント アプリを想定した記載となっているため、ここではそれに沿った形でアプリの登録とアクセス トークンの取得を行っています。

アクセス トークンを取得出来たら、PowerShell で Office 365 Reporting Web サービスのリクエストを送信するへ進みます。

[アプリケーションの許可] を PowerShell で試す

  1. Azure Portal にサインインします。
  2. [Active Directory] – [アプリの登録] – [新規登録] をクリックします。
  3. [名前] に任意のアプリの名前を入力します。(例 : App02)
  4. [サポートされているアカウントの種類] から [この組織のディレクトリ内のアカウントのみ] を選択します。
  5. [リダイレクト URI] で [Web] を選択し、任意の URI を入力します。(例 : https://localhost/App02)
  6. [登録] をクリックします。
  7. 表示された [アプリケーション (クライアント) ID] の値を控えておきます。
  8. [管理] – [証明書とシークレット] – [クライアント シークレット] をクリックします。
  9. [新しいクライアント シークレット] をクリックします。
  10. [説明] に任意の説明を入力します。(例 : Key1)
  11. [有効期限] から任意の有効期限を選択します。(例 : 推奨: 6 か月)
  12. [追加] をクリックします。
  13. 表示されたクライアント シークレットの値を控えておきます。
  14. [管理] – [API のアクセス許可] をクリックします。
  15. [アクセス許可の追加] をクリックします。
  16. [所属する組織で使用している API] の中から [Office 365 Exchange Online] をクリックします。
  17. [アプリケーションの許可] をクリックします。
  18. [ReportingWebService.Read.All] のチェックをオンにします。
  19. [アクセス許可の追加] をクリックします。
  20. [<テナント名> に管理者の同意を与えます] をクリックします。
  21. [はい] をクリックします。
  22. Azure Portal で [Active Directory] – [管理] – [ロールと管理者] をクリックします。
  23. [Exchange 管理者] をクリックします。
  24. [割り当ての追加] をクリックします。
  25. (PIM を使用していない環境の場合) 登録したアプリの名前で検索して選択し、[追加] をクリックします。
  26. (PIM を使用している環境の場合) [メンバーの選択] – [メンバーが選択されていない] (もしくは [xxx 選択済み]) をクリックします。
  27. (PIM を使用している環境の場合) 登録したアプリの名前で検索して選択し、[選択] をクリックします。
  28. (PIM を使用している環境の場合) [次へ] をクリックします。
  29. (PIM を使用している環境の場合) [割り当ての種類] から [アクティブ] を選択し、必要に応じて期間や割り当ての理由を入力して [割り当て] をクリックします。
  30. 設定した内容が Exchange Online へ同期されてくる必要があるため、しばらく待ちます。
  31. PowerShell を起動します。
  32. 以下のようにコマンドを実行し、出力結果の access_token の値を控えておきます。
$Params = @{
  "client_id" = "<登録したアプリのアプリケーション (クライアント) ID>"
  "scope" = "https://outlook.office.com/.default"
  "client_secret" = "<登録したアプリのクライアント シークレット>"
  "grant_type" = "client_credentials"
}
Invoke-RestMethod -Uri "https://login.microsoftonline.com/<テナント名>/oauth2/v2.0/token" -Method "POST" -Body $Params

実行例)

$Params = @{
  "client_id" = "342658db-3ef8-4164-9491-e96dcd0d5731"
  "scope" = "https://outlook.office.com/.default"
  "client_secret" = "H_w8Q~3QAuV5LTHNB9XRXq4ALSQD9ewF-.DV.aC6"
  "grant_type" = "client_credentials"
}
Invoke-RestMethod -Uri "https://login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/token" -Method "POST" -Body $Params

以上で [アプリケーションの許可] でのアクセス トークンの取得が完了します。なお手順 20、21 は管理者の同意を行う処理です。手順 20、21 の代わりに、「https://login.microsoftonline.com/organizations/v2.0/adminconsent?&client_id=<登録したアプリのアプリケーション (クライアント) ID>&redirect_uri=<登録したアプリのリダイレクト URI をエンコードしたもの>&scope=<https://outlook.office.com/.default をエンコードしたもの>」のような URL を作成して、ブラウザーでアクセスし、全体管理者でサインインおよびアプリの使用に同意いただくことも可能です。(例 : https://login.microsoftonline.com/organizations/v2.0/adminconsent?&client_id=342658db-3ef8-4164-9491-e96dcd0d5731&redirect_uri=https%3a%2f%2flocalhost%2fApp02&scope=https%3a%2f%2foutlook.office.com%2f.default)

また手順 32 は Client Credentials Flow でアクセス トークンを取得する処理です。知識がある方は MSAL を使用するなど別の方法でアクセス トークンを取得していただければ問題ありません。

アクセス トークンを取得出来たら、PowerShell で Office 365 Reporting Web サービスのリクエストを送信するへ進みます。

PowerShell で Office 365 Reporting Web サービスのリクエストを送信する

取得したアクセス トークンを使用して PowerShell で Office 365 Reporting Web サービスを Get-MessageTrace コマンドのように利用するには、以下のようにコマンドを実行します。ここでは検索条件として差出人のメール アドレスを指定しています。

$Headers = @{"Authorization" = "Bearer <取得したアクセス トークン>"}
(Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/?`$filter=SenderAddress eq '<差出人メール アドレス>'" -Headers $Headers).content.properties | select @{n="Received"; e={$_.Received."#text".Split('.')[0]}}, SenderAddress, RecipientAddress,Subject,Status | ft

実行例)

$Headers = @{"Authorization" = "Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkN6TjFhSU5iUEhzYTJkWnpRMG9PUjgyY0J0REJZMndIZmhZYWp2eTlNWGsiLCJhbGciOiJSUzI1NiIsIng1dCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSIsImtpZCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzZkMDQ2MzMxLTVlYTUtNDMwNi04N2FlLThkNTFmM2RjYzcxZS8iLCJpYXQiOjE2NjIxMzA2OTEsIm5iZiI6MTY2MjEzMDY5MSwiZXhwIjoxNjYyMTM1OTIzLCJhY2N0IjowLCJhY3IiOiIxIiwiYWlvIjoiQVNRQTIvOFRBQUFBc2J1NDJTcVhDWGEveEVhR211ZXpmRUQrMk1KcDFtVGw4c0ttL1lrSStoMD0iLCJhbXIiOlsicHdkIl0sImFwcF9kaXNwbGF5bmFtZSI6IkFwcDAxIiwiYXBwaWQiOiI5ZjlkNDYyZi0yNTU4LTQ5YjktOTM2My00NmJhYWNlZTQ4MTEiLCJhcHBpZGFjciI6IjEiLCJlbmZwb2xpZHMiOltdLCJmYW1pbHlfbmFtZSI6IuWwj-mWkyIsImdpdmVuX25hbWUiOiLnq5zlpKrpg44iLCJpcGFkZHIiOiI1OS4xNDcuMjM1LjExOCIsIm5hbWUiOiLlsI_plpPnq5zlpKrpg44iLCJvaWQiOiIxNTBiZmRhOS05MGY1LTRjMDctYjZlMC1mMWU3ODA0ZDcyYTkiLCJwdWlkIjoiMTAwMzdGRkU5NDE4NDVBMCIsInJoIjoiMC5BVWtBTVdNRWJhVmVCa09Icm8xUjg5ekhIZ0lBQUFBQUFQRVB6Z0FBQUFBQUFBQkpBRkEuIiwic2NwIjoiUmVwb3J0aW5nV2ViU2VydmljZS5SZWFkIFVzZXIuUmVhZCIsInNpZCI6ImY2Y2NiNmZhLWJiYzctNDFkZi1iYWE3LWRkZTY4Y2NhYzZmNSIsInN1YiI6IjJNMnd0UHk0VHBXTm9HUkNhQkJKbENCQWlDLTVQeGt6cGNtLUM4eG1LRm8iLCJ0aWQiOiI2ZDA0NjMzMS01ZWE1LTQzMDYtODdhZS04ZDUxZjNkY2M3MWUiLCJ1bmlxdWVfbmFtZSI6InJ5a29tYUByeWtvbWEwMy5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJyeWtvbWFAcnlrb21hMDMub25taWNyb3NvZnQuY29tIiwidXRpIjoiVmFsQjM2VFVLa3FrUF95d3RFSm5BQSIsInZlciI6IjEuMCIsIndpZHMiOlsiZTg2MTFhYjgtYzE4OS00NmU4LTk0ZTEtNjAyMTNhYjFmODE0IiwiMTk0YWU0Y2ItYjEyNi00MGIyLWJkNWItNjA5MWIzODA5NzdkIiwiNjJlOTAzOTQtNjlmNS00MjM3LTkxOTAtMDEyMTc3MTQ1ZTEwIiwiYjc5ZmJmNGQtM2VmOS00Njg5LTgxNDMtNzZiMTk0ZTg1NTA5Il19.BLxcMYf-0eqnCGxT8AWq3XZ0oOQDMkC6wQSpjYEKA4YLVbFyWVbEYTk42yNdIIfjodWUQDsH6ZMeDXaUsFy3Zk_PyfKHISjthE9ffTCerRkYcD-CAlX6edjgrIbsUw63d4xaDIHbjqlIGirfRcLdcUVNVUQo0lvAWR8DZnTc4gckfaONmNZC7tu-B1jPuVfcqbUyp3WyJ0v6FRPDaoL0_MACYlmiYlmtN5beTEuXvoR3o3dfHgicv8Hpxu2uy-rDhw7T-oWRHUrh0uIDgazNRZ4IWLpG4gW-XQXsIyedV6H0nxtH2IX89xRqt9q-PdjCdlHkzVhlTVOxFO9Ryj4WwQ"}
(Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/?`$filter=SenderAddress eq 'User01@contoso.onmicrosoft.com'" -Headers $Headers).content.properties | select @{n="Received"; e={$_.Received."#text".Split('.')[0]}}, SenderAddress, RecipientAddress,Subject,Status | ft

日付を指定するには以下のようにコマンドを実行します。

(Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/?`$filter=StartDate eq datetime'2022-09-01T00:00:00Z' and EndDate eq datetime'2022-09-02T00:00:00Z'" -Headers $Headers).content.properties  | select @{n="Received"; e={$_.Received."#text".Split('.')[0]}}, SenderAddress, RecipientAddress,Subject,Status | ft

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
}

まずは Get-MessageTrace コマンド相当のログを変数に格納します。以下のようにコマンドを実行します。

$MessageTrace = Invoke-RestMethod -Uri "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTrace/" -Headers $Headers

以下のようにコマンドを実行して、Get-MessageTrace コマンドのログの 1 件目のメッセージに対する Get-MessageTraceDetail コマンド相当のリクエストの URL を生成します。

$MessageTrace.Content.Properties[0] | Get-MessageTraceDetailUrl -Escape

生成した URL を使用して、以下のようにコマンドを実行すると、Get-MessageTraceDetail 相当の内容が取得できます。

(Invoke-RestMethod "<生成した URL>" -Headers $Headers).Content.Properties | select @{n="Date"; e={$_.Date.InnerText}}, Event, @{n="Detail"; e={if ($_.Detail.GetType().Name -eq "String") {$_.Detail} else {""}}}

実行例)

(Invoke-RestMethod "https://reports.office365.com/ecp/reportingwebservice/reporting.svc/MessageTraceDetail?`$filter=MessageTraceId eq guid'47dc844e-2cf5-4ee9-7174-08da8cf3da3e' and RecipientAddress eq 'User01@contoso.onmicrosoft.com' and SenderAddress eq 'User02@contoso.onmicrosoft.com' and StartDate eq datetime'2022-08-31T15:29:46.1324227Z' and EndDate eq datetime'2022-09-02T15:29:46.1324227Z'" -Headers $Headers).Content.Properties | select @{n="Date"; e={$_.Date.InnerText}}, Event, @{n="Detail"; e={if ($_.Detail.GetType().Name -eq "String") {$_.Detail} else {""}}}

基本認証での Office 365 Reporting Web サービスの利用は、2022 年 12 月いっぱいで廃止されます。以下に記載する方法は基本認証で利用する方法となりますが、この方法は推奨されません。

基本認証で試す

  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 相当の内容が取得できたことを確認します。