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

如何使用Azure CLI获取Microsoft Graph的指定oauth2Permissions

使用Azure CLI批量获取Microsoft Graph的指定oauth2Permissions ID

问题场景

原本通过PowerShell可批量筛选指定的Microsoft Graph应用权限:

$appPerms =@()
$appPerms += "AttackSimulation.Read.All"
$appPerms += "Acronym.Read.All"
$appPerms += "ReportSettings.ReadWrite.All"
$msGraphService = Get-AzureADServicePrincipal -Filter "DisplayName eq 'Microsoft Graph'"
$permissions = $msGraphService.AppRoles.Where({$_.Value -in $appPerms})

但改用Azure CLI实现时遇到阻碍,当前仅能通过单条命令获取单个权限ID:

$userRead = az ad sp show --id $graphId --query "oauth2Permissions[?value=='User.Read'].id | [0]" 

需要修改命令以批量获取多个指定权限的ID。

实现方案

方法1:直接在查询中指定多权限值

利用JMESPath的in操作符,一次性筛选多个目标权限:

# 先获取Microsoft Graph的服务主体ID(未提前保存时执行)
$graphId = az ad sp list --filter "displayName eq 'Microsoft Graph'" --query "[0].id" -o tsv

# 获取指定权限的完整信息(含Value、Id、显示名称)
az ad sp show --id $graphId --query "oauth2Permissions[?value in ['AttackSimulation.Read.All', 'Acronym.Read.All', 'ReportSettings.ReadWrite.All']].{权限值: value, 权限ID: id, 用户同意显示名: userConsentDisplayName}" -o table

# 仅获取权限ID列表(适合后续脚本处理)
az ad sp show --id $graphId --query "oauth2Permissions[?value in ['AttackSimulation.Read.All', 'Acronym.Read.All', 'ReportSettings.ReadWrite.All']].id" -o tsv

方法2:结合变量动态传入权限列表

如果权限数量较多或需动态调整,可先定义权限数组再拼接查询条件:

# 定义目标权限列表
$targetPerms = @("AttackSimulation.Read.All", "Acronym.Read.All", "ReportSettings.ReadWrite.All")

# 生成JMESPath匹配条件字符串
$jmesFilter = "'" + ($targetPerms -join "', '") + "'"

# 执行查询获取权限ID列表
az ad sp show --id $graphId --query "oauth2Permissions[?value in [$jmesFilter]].id" -o tsv

注意事项

  • JMESPath的in操作符是实现批量筛选的核心,支持匹配数组内的多个值
  • 若你需要筛选的是**应用权限(App Roles)**而非委派权限(oauth2Permissions),只需将查询中的oauth2Permissions替换为appRoles,即可对应最初PowerShell代码的场景
  • 使用-o tsv输出格式可得到纯文本ID列表,便于后续脚本调用

内容的提问来源于stack exchange,提问作者Amal Ps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:05:25