PowerShell调用MS Graph API获取报告缺Reports.Read.All权限如何解决
问题根因
你在Graph Explorer中授予的Reports.Read.All权限仅作用于Graph Explorer专属应用,本地PowerShell通过Az模块获取Token时,默认使用微软内置的「Azure PowerShell」企业应用,两个应用权限相互独立,因此Token中缺少所需权限导致调用失败。
解决方案
方案1:改用Microsoft Graph PowerShell SDK(推荐,复杂度最低)
- 首先安装对应模块:
Install-Module Microsoft.Graph.Reports -Scope CurrentUser -Force
- 连接Graph并指定所需权限:
# 首次运行会弹出登录窗口,登录后同意权限申请即可,需要租户管理员预先授予该权限的管理员同意 Connect-MgGraph -Scopes "Reports.Read.All"
- 直接调用官方封装的cmdlet获取数据:
# 获取凭据用户注册详情数据 Get-MgReportCredentialUserRegistrationDetail -All
如果需要直接调用beta版接口也可以用通用请求方法:
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/reports/credentialUserRegistrationDetails"
方案2:保留现有Az模块脚本逻辑
需要先由租户管理员完成以下权限配置:
- 登录Azure门户,进入「Azure Active Directory」>「企业应用」>「所有应用」
- 搜索客户端ID
1950a258-227b-4e69-a8d6-56280f147736,找到「Azure PowerShell」内置应用 - 进入「权限」页面,点击「添加权限」> 选择「Microsoft Graph」>「委托权限」
- 搜索并勾选
Reports.Read.All权限,点击「授予管理员同意」完成配置 - 回到本地PowerShell,先断开现有Az连接再重新登录,指定Graph权限范围:
Disconnect-AzAccount Connect-AzAccount -Scope "https://graph.microsoft.com/Reports.Read.All"
重新运行你现有脚本即可正常调用接口。
注意事项
Reports.Read.All属于高权限,必须由租户管理员完成同意配置,普通用户无法自行授予- 你当前调用的是beta版接口,接口行为可能发生变更,生产环境建议优先使用v1.0版本的对应接口
内容的提问来源于stack exchange,提问作者RansomV
相关产品推荐
相关产品推荐

