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

如何用Azure资源图查询获取未启用备份的VM的资源ID与名称

解决Azure Resource Graph查询未备份虚拟机并显示资源ID的问题

需求

查找所有未启用备份的Azure虚拟机,需同时展示虚拟机名称和对应的资源ID。

原查询问题

原查询仅能获取虚拟机名称,尝试添加资源ID时遇到两种问题:

  1. 在summarize中加入id列分组,会破坏筛选未备份虚拟机的逻辑(原本通过countOfName == 1判断仅在VM列表中存在、不在已备份列表中的VM)。
  2. 使用leftouter join再次关联resources表时,触发错误:表resources被作为右表引用了2次,超过了1次的限制。

正确查询方案

使用let语句预先定义已备份虚拟机的集合,再通过leftanti连接直接筛选出未备份的虚拟机,同时保留名称和资源ID:

// Azure Resource Graph Query
// 查找所有未启用备份的虚拟机,显示名称和资源ID
let backedUpVMs = recoveryservicesresources
    | where type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'
    | where properties.dataSourceInfo.datasourceType =~ 'Microsoft.Compute/virtualMachines'
    | project sourceResourceId = properties.sourceResourceId
    | extend vmName = strcat_array(array_slice(split(sourceResourceId, '/'), 8, -1), '/');
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, id
| join kind=leftanti (backedUpVMs) on $left.name == $right.vmName

方案说明

  • let backedUpVMs:先从恢复服务资源中提取所有已启用备份的虚拟机,整理出它们的名称和资源ID。
  • leftanti连接:这种连接类型会返回左表(所有虚拟机)中不存在于右表(已备份虚拟机)的行,直接得到未备份的虚拟机,同时保留name和id字段,逻辑简洁且避免了重复引用resources表的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:13:17