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

查询启用CustomScript扩展Azure VM及属性的KQL方案

问题描述

需求为统计启用CustomScript扩展的虚拟机总数、对应虚拟机清单,并获取该扩展的properties属性信息。以下原有KQL查询存在逻辑问题,无法正确提取CustomScript扩展相关数据:

Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
    JoinID = toupper(id),
    OSName = tostring(properties.osProfile.computerName),
    OSType = tostring(properties.storageProfile.osDisk.osType),
    VMSize = tostring(properties.hardwareProfile.vmSize)
| join kind=leftouter(
    Resources
    | where type == 'microsoft.compute/virtualmachines/extensions'
    | extend
        VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
        ExtensionName =~ 'custom-script'
) on $left.JoinID == $right.VMId
| top 5 by name asc
可用KQL实现方案

输出启用CustomScript扩展的虚拟机清单+扩展属性

Resources
// 先筛选所有虚拟机扩展资源
| where type == 'microsoft.compute/virtualmachines/extensions'
// 精准匹配CustomScript扩展,兼容Windows/Linux不同命名规则
| where properties.type =~ 'CustomScript' or name contains 'CustomScript'
| extend
    VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
    ExtensionName = name,
    ExtensionProvisioningState = tostring(properties.provisioningState),
    ExtensionProperties = properties
// 关联虚拟机基础属性
| join kind=inner (
    Resources
    | where type == 'microsoft.compute/virtualmachines'
    | extend
        VMJoinId = toupper(id),
        VMName = name,
        VMResourceGroup = resourceGroup,
        VMLocation = location,
        OSComputerName = tostring(properties.osProfile.computerName),
        OSType = tostring(properties.storageProfile.osDisk.osType),
        VMSize = tostring(properties.hardwareProfile.vmSize)
) on $left.VMId == $right.VMJoinId
// 清理关联产生的冗余字段,整理输出列
| project VMName, VMResourceGroup, VMLocation, OSComputerName, OSType, VMSize, ExtensionName, ExtensionProvisioningState, ExtensionProperties
| sort by VMName asc

统计启用CustomScript扩展的虚拟机总数

如果只需要统计数量,可以在上述查询的基础上追加聚合语句,替换最后两行即可:

| summarize CustomScriptVMCount = dcount(VMId)
原查询的错误点
  • 筛选逻辑错误:ExtensionName =~ 'custom-script'写在extend子句中,仅做字段赋值没有加where过滤条件,会返回虚拟机下所有类型的扩展
  • 匹配规则错误:CustomScript扩展在不同OS下的名称不固定,硬匹配custom-script字符串会漏统计
  • 关联方式错误:使用leftouter左关联会返回所有虚拟机,包括未安装目标扩展的实例,不符合筛选要求
  • 输出逻辑错误:没有指定输出字段,冗余字段过多,也没有单独提取扩展的properties属性

注意:如果需要同时返回总数和清单,可以使用summarize结合make_list函数聚合,示例:| summarize TotalCount = dcount(VMId), VMList = make_list(VMName)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:25:34