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

如何通过Azure CLI检查VMSS是否已分配指定用户托管标识?

检查VMSS是否已分配指定用户托管标识的正确方法

问题核心

az vmss identity show返回的userAssignedIdentities是字典结构,键为用户托管标识的完整资源ID,直接用contains或键值访问会因为语法逻辑不对导致失败。以下是两种可靠的检查方法:


方法1:使用Azure CLI内置JMESPath查询

检查指定标识的资源ID是否存在

提取字典的所有键,用contains判断目标资源ID是否在其中:

az vmss identity show --name name-vmss --resource-group rg-name --query "contains(keys(userAssignedIdentities), '/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/你的标识名称')" --output tsv

返回true表示已分配,false表示未分配。

检查指定标识的名称是否存在

如果只知道标识名称,可通过拆分资源ID的最后一段提取名称再检查:

az vmss identity show --name name-vmss --resource-group rg-name --query "contains([for id in keys(userAssignedIdentities): split(id, '/')[-1]], '你的标识名称')" --output tsv

方法2:结合jq工具处理返回结果

若本地安装了jq,可使用更灵活的字典遍历逻辑:

检查资源ID

az vmss identity show --name name-vmss --resource-group rg-name | jq '.userAssignedIdentities | has("你的标识资源ID")'

检查标识名称

az vmss identity show --name name-vmss --resource-group rg-name | jq '.userAssignedIdentities | keys[] | split("/")[-1]' | grep -q "你的标识名称" && echo "已分配" || echo "未分配"

失败原因说明

  • contains(userAssignedIdentities, "xxx"):contains默认不会遍历字典的键,只会检查字典本身是否包含指定值,因此返回空。
  • 直接键值访问失败:通常是资源ID拼写错误(比如示例中的reosurce_id拼写错误),或者未使用完整资源ID作为键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:03:29