如何使用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
相关产品推荐
相关产品推荐

