审计O365订阅90天使用数据失败,仅获取最近2天记录求助
解决Search-UnifiedAuditLog仅返回最近2天Power BI审计日志的问题
问题背景
尝试审计租户内Power BI及其他O365订阅的使用情况,但导出的Excel仅包含最近2天的数据。已确认将记录类型从误用的powerbi改为正确的20(Power BI对应的RecordType),但先后尝试两段脚本后仍只拉取到1/13和1/14的数据,怀疑时间语法存在问题。
尝试过的脚本:
第一段:
$startdate = get-date -f 10-16-2024 $activities = Search-UnifiedAuditLog -StartDate $startDate -EndDate (Get-Date) -RecordType 20 $activities | Export-Csv -Path "C:\Users\MYACCOUNT\Downloads\90dayactivitytest.csv" -NoTypeInformation
第二段:
$startDate = (Get-Date).AddDays(-90) $activities = Search-UnifiedAuditLog -StartDate $startDate -EndDate (Get-Date) -RecordType 20 $activities | Export-Csv -Path "C:\UserActivities.csv" -NoTypeInformation
核心问题分析
- 时间格式解析错误:第一段脚本中用
get-date -f 10-16-2024生成的是字符串,而非DateTime对象。如果系统区域设置不是MM-dd-yyyy格式,PowerShell会无法正确解析该日期,导致StartDate被默认设置为最近的日期,最终只拉取到2天的数据。 - 默认返回记录数限制:
Search-UnifiedAuditLog默认仅返回1000条记录,若最近2天的日志量已达1000,即使时间范围覆盖90天,也只会返回这些最新记录。
修正后的脚本
基础版(日志量≤50000条)
直接传递DateTime对象,并指定最大返回记录数:
# 方式1:指定具体起始日期(DateTime类型) $startDate = Get-Date -Month 10 -Day 16 -Year 2024 # 方式2:获取90天前的日期 # $startDate = (Get-Date).AddDays(-90) $endDate = Get-Date # 拉取Power BI审计日志,设置ResultSize为Unlimited(单次最大支持50000条) $activities = Search-UnifiedAuditLog -StartDate $startDate -EndDate $endDate -RecordType 20 -ResultSize Unlimited # 导出到CSV(指定UTF8编码避免乱码) $activities | Export-Csv -Path "C:\Users\MYACCOUNT\Downloads\90dayactivitytest.csv" -NoTypeInformation -Encoding UTF8
分页版(日志量>50000条)
由于Search-UnifiedAuditLog单次最多返回50000条记录,超过该数量需分页获取:
$startDate = (Get-Date).AddDays(-90) $endDate = Get-Date $offset = 0 $allActivities = @() # 循环分页拉取所有日志 do { $results = Search-UnifiedAuditLog -StartDate $startDate -EndDate $endDate -RecordType 20 -ResultSize 50000 -Offset $offset if ($results.Count -gt 0) { $allActivities += $results $offset += 50000 } else { break } } while ($true) # 导出所有日志到CSV $allActivities | Export-Csv -Path "C:\Users\MYACCOUNT\Downloads\90dayactivitytest.csv" -NoTypeInformation -Encoding UTF8
额外检查项
- 确认租户的审计日志保留期限至少为90天,可通过Microsoft 365管理中心查看设置。若保留期仅2天,即使脚本正确也无法获取更早的数据。
- 执行脚本的账号需具备查看审计日志的权限(如全局管理员、合规管理员等)。
内容的提问来源于stack exchange,提问作者Whoisme
相关产品推荐
相关产品推荐

