社畜の所業

社畜の所業

Microsoft365の機能について解説をしていきたいと思います。このブログの情報をご活用いただければ幸いです。たまに他の情報も取り入れていきたいと思います。

※このサイトはPR記事を含みます。

【Microsoft365参考書】Microsoft監査ログをSearch-UnifiedAuditLogで出力する場合に50000件のログを出力するには?

今回は、Search-UnifiedAuditLogで監査ログを出力する際に、最大値の50000件のログを出力する方法についてご紹介したいと思います。

 

まず、Search-UnifiedAuditLog の SessionCommand には以下の値を利用できます。 

 

 

  

ReturnNextPreviewPage 

この値を使用すると、コマンドレットはデータを日付で並べ替え、重複レコードを削除して、返します。ページングまたは ResultSize パラメーターのいずれかを使用して返されるレコードの最大件数は、5,000 レコードです。 

  

ReturnLargeSet 

この値を使用すると、コマンドレットはデータを重複ありで並べ替えずに返します。ページングを使用すると、最大 50,000 件の結果にアクセスできます。 

  

上記のとおり、SessionCommand パラメーターの値に ReturnNextPreviewPage を指定しますと、5000 件までしかログを取得することができません。

  

一方、SessionId パラメーターに任意の値を指定し、SessionCommand パラメーターの値に ReturnLargeSet を指定しますと、例としてファイル 1 に 1 ~ 5000 件までのアクセスログ情報、ファイル 2 に 5001 ~ 10000 件までのログ情報といった具合に、最大 50000 件のアクセスログを取得することが可能です。 

 

SessionId パラメーターは、ページングされたデータを返すために複数回実行するコマンド (コマンドレットとそのパラメーター) を識別するために、文字列の形式で指定する ID を指定します。  

なお、[SessionId] と [SessionCommand] パラメーターの ReturnLargeSet を併用し、50,000 件のログを取得した場合は、日時の新しい順ではなく、順不同で出力されます。 

 

  

以下に50000件のログを取得する場合のコマンドレット例をご案内いたします。

 

 

 

特定のユーザーのログを出力するコマンド例 

出力結果が 50,000 件を超える場合には、出力対象の日付の範囲を絞るなど、50,000 件未満におさえていただく必要があります。

 

ExchangeOnlineに接続してから実行してください。

 

it-bibouroku.hateblo.jp

 

  

[構文] 

Search-UnifiedAuditLog -ResultSize "5000" -StartDate <開始日> -EndDate <終了日> -UserIds <ユーザー> -SessionId "UnifiedAuditLogSearch20181212" -SessionCommand "ReturnLargeSet" -Formatted | Export-Csv -Encoding UTF8 -NoTypeInformation -Path "<ファイル名を含んだ保存先のパス.csv>" 

  

 -SessionId に指定する値は、任意となります。 (例では"UnifiedAuditLogSearch20181212"としてます)

後述の実行例のように、同一期間のログを取得する場合、本パラメーターには同一の値を指定します。 

  

[実行例] 

Search-UnifiedAuditLog -ResultSize "5000" -StartDate "2018/12/01 15:00" -EndDate "2018/12/12 15:00" -UserIds user@contoso.com -SessionId "UnifiedAuditLogSearch20181212" -SessionCommand "ReturnLargeSet" -Formatted | Export-Csv -Encoding UTF8 -NoTypeInformation -Path "C:\Temp\UnifiedAuditLogAll-001.csv

  

Search-UnifiedAuditLog -ResultSize "5000" -StartDate "2018/12/01 15:00" -EndDate "2018/12/12 15:00" -UserIds user@contoso.com -SessionId "UnifiedAuditLogSearch20181212" -SessionCommand "ReturnLargeSet" -Formatted | Export-Csv -Encoding UTF8 -NoTypeInformation -Path  "C:\Temp\UnifiedAuditLogAll-002.csv

  

Search-UnifiedAuditLog -ResultSize "5000" -StartDate "2018/12/01 15:00" -EndDate "2018/12/12 15:00" -UserIds user@contoso.com -SessionId "UnifiedAuditLogSearch20181212" -SessionCommand "ReturnLargeSet" -Formatted | Export-Csv -Encoding UTF8 -NoTypeInformation -Path  "C:\Temp\UnifiedAuditLogAll-003.csv

  

以降、ログの出力がなくなるまで、出力するファイル名を変更しつつ、コマンドを実行します。 

 

  

コマンドの補足 

監査ログの検索の出力日時は UTC (世界標準時となります。JST (日本標準時 UTC +9時間 となりますので、日本時間の場合、時間を引いた時間を指定し検索します。 

上記コマンドは、2018  12  2  0 時から 12  13  0 時までの期間の監査ログを、SessionId の値を "UnifiedAuditLogSearch20181212" と指定し、ドライブ配下の Temp フォルダーに "UnifiedAuditLogAll-001.csv 1  5000 件目まで、"UnifiedAuditLogAll-002.csv 5001  10000 件目まで出力しています。 

-Path パラメーターに指定いただく添付ファイル名を変更することで、以降、続くログが出力される動作となります。 

  

なお、監査ログのデータの総数が50000を超えているかについては、[ResultCountで確認ができます。   

50,000 件を超えた場合の数値も確認が可能であるかについて、実施した結果、約 190,000 件くらいまでログがあることを ResultCount の値で確認することができました。

 

 

  

監査ログのログ数を確認するコマンドレット

<構文> 

(Search-UnifiedAuditLog -ResultSize "1" -StartDate "開始日" -EndDate "終了日" -SessionId "任意の名前" -SessionCommand "ReturnLargeSet").ResultCount 

  

<実行例> 

(Search-UnifiedAuditLog -ResultSize "1" -StartDate "2019/8/1" -EndDate "2019/8/31" -SessionId "UnifiedAuditLogSearch01" -SessionCommand "ReturnLargeSet").ResultCount 

  

 

なお、以下の2つのケースがあることを確認しているため注意してください。 

★発生した2つのケースは、ともに、ある程度時間を空けてからリトライすると、正しい結果(取得されたデータの件数と、ResultCount 属性の値が一致)が得られます。

  

ケース1)取得されるべきデータの件数が少ない 

取得されるべきデータの件数が、5000件を超える場合に発生することが多く、Search-UnifiedAuditLog コマンドレットを実行してから、応答が返ってくるまで、5分程度かかる。 

ResultCount 属性の値は 5000件を超える値が入り、1回目の結果で、ResultIndex が 1~5000 のデータが取得されるのが正しい動作だが、5000件未満のデータしか結果が返らないことがある。 

  

ケース2)取得されるべきデータの件数が多い  

取得されるべきデータの件数が 5000件未満(ResultCount 属性の値が5000件未満)である場合に、5000件 の結果を返すことがある。 

 

 

監査ログについて以下の記事でまとめていますので参考としてくださいね。

it-bibouroku.hateblo.jp