通过PowerShell导出Microsoft Entra ID MFA/手机应用变更审计日志遇问题
解决Entra ID MFA/手机应用变更日志导出缺失内容的问题
问题根源
你的脚本存在两个核心问题:
- 未筛选MFA相关活动:原脚本仅按时间过滤,导出了所有目录审计日志,没有精准定位MFA/手机应用的变更操作
- 嵌套属性未展开:
Get-AzureADAuditDirectoryLogs返回的targetResources、additionalDetails等关键字段是嵌套对象,默认Export-Csv只会导出对象类型,不会展开其中的详细内容
修正步骤
1. 确认目标活动名称
先运行以下命令,查看所有相关的MFA/手机应用变更活动名称:
Get-AzureADAuditDirectoryLogs -Filter "activityDateTime gt $(Get-Date).AddDays(-1).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')" | Select-Object activityDisplayName | Get-Unique
常见的目标活动名称包括:
- Set mobile phone
- Set authentication method
- Update authentication method
- Reset security info
2. 修正脚本(展开嵌套属性+精准筛选)
使用以下脚本,它会:
- 筛选指定的MFA相关活动
- 展开嵌套的用户信息、目标资源、操作详情
- 导出完整的结构化数据到CSV
# 设置时间范围(UTC格式,符合Graph API要求) $startDate = (Get-Date).AddDays(-1).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") $filename = Get-Date -Format "yyyy-MM-dd" $outputPath = "c:\install.tmp\$filename-MFA-Changes.csv" # 获取并处理MFA相关审计日志 Get-AzureADAuditDirectoryLogs -Filter "activityDateTime gt $startDate and (activityDisplayName eq 'Set mobile phone' or activityDisplayName eq 'Set authentication method' or activityDisplayName eq 'Update authentication method' or activityDisplayName eq 'Reset security info')" | Select-Object ` activityDateTime, activityDisplayName, @{Name='InitiatedByUser'; Expression={$_.initiatedBy.user.userPrincipalName}}, @{Name='TargetUser'; Expression={$_.targetResources | Where-Object {$_.type -eq 'User'} | Select-Object -ExpandProperty displayName}}, @{Name='TargetUserUPN'; Expression={$_.targetResources | Where-Object {$_.type -eq 'User'} | Select-Object -ExpandProperty userPrincipalName}}, @{Name='AdditionalDetails'; Expression={$_.additionalDetails | ConvertTo-Json -Compress}} | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8
3. 脚本说明
- 时间格式修正:使用UTC的ISO 8601格式,确保和Graph API的时间筛选规则匹配
- 活动筛选:通过
activityDisplayName精准定位MFA/手机应用的变更操作 - 嵌套属性展开:通过计算属性(
@{Name=; Expression=})提取initiatedBy、targetResources中的关键信息,将additionalDetails转为JSON字符串保留所有详情 - 编码设置:指定
UTF8编码,避免中文乱码
验证导出结果
打开CSV文件后,你可以看到:
- 操作时间、活动名称
- 发起操作的用户UPN
- 目标用户的姓名和UPN
- 完整的操作详情(JSON格式,可进一步解析)
内容的提问来源于stack exchange,提问作者DuhMan
相关产品推荐
相关产品推荐

