使用Microsoft Graph API获取上月邮件活动计数的PowerShell查询报错求助
解决Graph API自定义日期范围获取邮件活动计数的问题
问题根源
你使用的getEmailActivityCounts报告API的period参数不支持自定义日期范围字符串(如'2024-10-01'..'2024-10-31'),这个参数仅接受微软预定义的周期枚举值,比如D7、D30、M1、LAST_MONTH等,直接传自定义日期范围会触发"Invalid query string"错误。
解决方案
方法1:直接使用预定义的LAST_MONTH参数(推荐)
如果你的需求是每月1日运行脚本获取上月完整数据,LAST_MONTH参数正好匹配这个场景,API会自动处理不同月份的天数差异,无需手动计算日期:
$activityCountsUrl = "https://graph.microsoft.com/v1.0/reports/getEmailActivityCounts(period='LAST_MONTH')"
调用这个URL就能直接获取上月的邮件活动统计数据,和你用预定义D7的方式完全兼容。
方法2:自定义日期范围(灵活场景)
如果需要非固定周期的自定义日期统计,需要改用getEmailActivityUserDetail API获取详细数据后,本地聚合计算总数。同时要修正你原来的日期计算逻辑(避免1月时年份错误):
- 修正日期计算逻辑:
$today = Get-Date # 计算上月第一天 if ($today.Month -eq 1) { $startDate = Get-Date -Year ($today.Year - 1) -Month 12 -Day 1 } else { $startDate = Get-Date -Year $today.Year -Month ($today.Month - 1) -Day 1 } # 计算上月最后一天 $endDate = $startDate.AddMonths(1).AddDays(-1) # 转换为API要求的日期格式 $startStr = $startDate.ToString("yyyy-MM-dd") $endStr = $endDate.ToString("yyyy-MM-dd")
- 调用详细数据API并聚合统计:
# 构造带日期筛选的API URL $detailReportUrl = "https://graph.microsoft.com/v1.0/reports/getEmailActivityUserDetail(filter='activityDate ge $startStr and activityDate le $endStr')" # 调用API(这里假设你已经配置好Graph认证的Headers) $reportContent = Invoke-RestMethod -Uri $detailReportUrl -Headers $authHeaders -Method Get # 将CSV格式的报告内容转为PowerShell对象 $emailActivityData = $reportContent | ConvertFrom-Csv # 聚合计算总发送/接收邮件数 $totalSent = ($emailActivityData | Measure-Object -Property sentCount -Sum).Sum $totalReceived = ($emailActivityData | Measure-Object -Property receivedCount -Sum).Sum
之后你就可以把$totalSent和$totalReceived的数据发布到SharePoint列表。
内容的提问来源于stack exchange,提问作者alexisc
相关产品推荐
相关产品推荐

