如何在Azure Resource Graph Explorer中查询各虚拟网络的已连接设备数
解决Azure Resource Graph统计所有子网已连接设备数量的问题
你可以通过以下修改后的查询语句实现需求,解决原查询仅取前两个子网、空设备场景报错的问题:
resources | where type =~ 'microsoft.network/virtualnetworks' | extend cidr = properties.addressSpace.addressPrefixes | extend no_cidr = array_length(cidr) | extend subnets = properties.subnets | extend no_subnets = array_length(subnets) // 展开所有子网,将数组转为逐行数据 | mv-expand subnet = subnets // 计算单个子网的设备数,自动处理无设备的空值场景 | extend subnet_device_count = array_length(coalesce(subnet.properties.ipConfigurations, dynamic([]))) // 按虚拟网络维度汇总所有子网的设备总数 | summarize total_devices = sum(subnet_device_count) by id, name, cidr, no_cidr, no_subnets // 调整列顺序,让结果更易读 | project name, total_devices, no_subnets, cidr, no_cidr, id
关键改动说明
- 遍历所有子网:用
mv-expand subnet = subnets替代手动指定subnets[0]/subnets[1],自动展开VNet下的所有子网,不管子网数量多少。 - 处理空设备场景:用
coalesce(subnet.properties.ipConfigurations, dynamic([]))将不存在/为空的ipConfigurations转为空数组,避免array_length计算时报错,空子网的设备数会被统计为0。 - 按VNet汇总总数:通过
summarize按虚拟网络的唯一标识分组,将所有子网的设备数累加,得到每个VNet的总已连接设备数。
如果需要查看每个子网的单独设备数(而非VNet总数),可以去掉最后的summarize和project步骤,直接保留展开后的行数据即可。
内容的提问来源于stack exchange,提问作者H_W
相关产品推荐
相关产品推荐

