はじめに
こんにちは、最近バイクが気になっているすかんくです。
今回は Microsoft Graph PowerShell SDK を用いて条件付きアクセスのレポート専用モード適用結果を集計する方法についてご紹介します。
背景の説明
Entra ID 管理センターのサインインログ画面では、レポート専用モードのフィルタに対応していません。そのため、レポート専用モードで展開したポリシーの適用結果を集計するには LogAnalytics 等にログを転送して集計する必要があります。

しかしながら本番展開準備としてのレポート専用モードのログ集計であれば、標準保管期間の 30 日間で問題無いケースが多いこと、また使い始めの環境で Azure サブスクリプションの用意が難しいケースにおいて今回の方法が有効です。
そこで、Microsoft Graph PowerShell SDK を使ってサインインログを取得し、ポリシー別に集計するスクリプトを作成しましたので紹介となります。
本記事はログ基盤の必要性を否定するものではありません。
実行の前提条件
このスクリプトを実行する前に、以下の前提条件を満たしていることを確認してください:
- Graph SDK PowerShell Moduleがインストールされていること
スクリプトの詳細
以下のリンクからスクリプトを確認できます:
実行時の注意点
- メモリ使用量:
All:$trueオプションを使用すると、組織内のレコード数に応じて大量のメモリを消費する可能性があります。代替としてTop 1000を使用することも検討してください。 - CSVファイルの出力: ポリシーごとにログを分けてCSVファイルに出力しますが、ファイル名に使用できない文字は削除されます。
- 次ページデータの取得:
All:$trueまたはTop Nを指定しても、1,000件以上のレコードが取得される場合があります。そのため、次ページリンクが存在する限りデータを取得する処理が含まれています。 - 出力対象: 既定では
reportOnlyFailureつまりレポート専用モードでの評価結果が失敗として記録されたログのみを出力する仕様となっています。すべてのログを出力したい場合は43-44行目のフィルタ処理を修正してください。
出力内容の調整
Intune コンプライアンスポリシーの準拠状態を要求するポリシーの場合、デバイス情報の取得を実施したいケースがあります。そういったケースの場合、出力パートで必要なプロパティを追加取得するよう修正してあげてください。
# ポリシー毎にログを分割してCSV出力
foreach ($log in $filteredLogs) {
foreach ($policy in $log.appliedConditionalAccessPolicies) {
$policyName = $policy.displayName
$sanitizedPolicyName = $policyName -replace '[\\\\\\/:*?"<>|]', ''
$logFileName = "./{0}_filteredLogs.csv" -f $sanitizedPolicyName.Replace(' ', '_')
}
# エクスポート用にカスタムオブジェクトを作成して必要な情報を展開
$log | ForEach-Object {
$exportLogs = [PSCustomObject]@{
CreatedDateTime = $_.createdDateTime
UserDisplayName = $_.userDisplayName
AppDisplayName = $_.appDisplayName
IPAddress = $_.ipAddress
ConditionalAccessPolicy = $policyName
Browser = $_.deviceDetail.Browser
DeviceId = $_.deviceDetail.DeviceId
DeviceDisplayName = $_.deviceDetail.DisplayName
IsCompliant = $_.deviceDetail.IsCompliant
IsManaged = $_.deviceDetail.IsManaged
OperatingSystem = $_.deviceDetail.OperatingSystem
TrustType = $_.deviceDetail.TrustType
}
$exportLogs | Export-Csv -Path $logFileName -NoTypeInformation -Append
}
}
おわりに
公式ドキュメントだけを見ると困る人が多そうだったので記載しました。
Microsoft Graph PowerShell SDK を用いたサインインログや監査ログの取得は様々なユースケースに活用できると思いますので、良しなにご活用いただければと思います。

