You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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月时年份错误):

  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")
  1. 调用详细数据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:52:58