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

如何通过Azure CLI根据资源组名称获取资源组ID?

问题:通过Azure CLI根据资源组名称获取资源组ID失败

尝试用Azure CLI从$exemption对象的ResourceGroupName字段获取对应资源组ID,以下两段代码均未成功:

$scopeId = (az group list --query $exemption.ResourceGroupName).Id

以及:

$scopeId = (az group list --query "[?name==$exemption.ResourceGroupName]").Id

$exemption的JSON结构(部分字段已处理):

[    
      {
        "scope": "Resource Group",
        "scopeName": "",
        "scopeNameFull": "/providers/Microsoft.Management/managementgroups/",
        "exemptionCategory": "Waiver",
        "name": "",
        "description": "My Exemption description",
        "expiresOn": null,
        "ResourceName": null,
        "ResourceGroupName": "rg",
        "subscriptionId": "123",
        "policyDefinitionReferenceIds": [ "policy1", "policy2"]
      }      
]
解决方案

错误原因分析

  1. 第一段代码的--query参数直接传入资源组名称,不符合JMESPath查询语法,az group list返回的是资源组数组,直接传字符串会导致语法错误。
  2. 第二段代码存在两处问题:JMESPath字符串比较未用引号包裹目标值,且PowerShell环境下变量插值需要处理引号冲突;另外Azure CLI返回的资源组ID字段是小写id,而非代码中的大写Id,同时查询结果是数组,需提取具体元素后再获取字段值。

正确实现方式

方式1:用az group show直接查询(推荐,效率更高)

不需要列出所有资源组,直接指定名称查询:

$rgName = $exemption.ResourceGroupName
$scopeId = az group show --name $rgName --query "id" --output tsv

--output tsv会直接返回纯字符串格式的资源组ID,无需额外处理。

方式2:修正az group list的查询语法

如果必须用az group list,按以下方式修正:

$rgName = $exemption.ResourceGroupName
$scopeId = (az group list --query "[?name=='$rgName'].id[]" --output json | ConvertFrom-Json)[0]
  • JMESPath查询中用单引号包裹变量值,避免PowerShell引号冲突
  • .id[]提取所有匹配资源组的id字段形成数组
  • 通过ConvertFrom-Json转成PowerShell对象后取第一个元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:15:40