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

如何通过Azure KQL获取Windows虚拟机的当前安装版本?

获取Azure虚拟机当前Windows Server版本的KQL查询方法

你当前使用的KQL查询读取的是Azure资源管理器(ARM)中存储的虚拟机部署元数据,其中imageReference字段记录的是VM创建时使用的镜像版本,并非虚拟机当前运行的Windows系统版本——因为后续通过系统更新或手动升级后的版本不会同步到ARM元数据中。

要获取虚拟机当前的Windows Server版本,需要依赖Log Analytics工作区收集的虚拟机运行时数据,前提是目标虚拟机已安装Log Analytics代理,且工作区配置了收集相关系统数据(如WMI类Win32_OperatingSystem)。

以下是几种可行的KQL查询方案:

方案1:基于WMI事件数据查询

通过收集到的Win32_OperatingSystem WMI数据直接获取当前系统版本:

WMIEvent
| where SourceName == "Win32_OperatingSystem"
| extend VMName = Computer, OSFullName = tostring(EventData.Caption), OSVersion = tostring(EventData.Version)
// 取每个VM最新的记录,避免历史数据干扰
| summarize arg_max(TimeGenerated, *) by VMName
// 关联Resources表获取资源组、订阅等元数据
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project VMName = name, ResourceGroup = resourceGroup, SubscriptionId = subscriptionId
) on VMName
| project SubscriptionId, ResourceGroup, VMName, OSFullName, OSVersion

方案2:通过更新历史间接获取

如果WMI数据未配置收集,可通过Windows更新历史记录推导当前版本:

UpdateSummary
| where UpdateState == "Success"
// 取每个VM最新的更新记录
| summarize arg_max(TimeGenerated, *) by Computer
| extend VMName = Computer, OSName = tostring(ComputerProperties.OSName), OSVersion = tostring(ComputerProperties.OSVersion)
// 关联资源元数据
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project VMName = name, ResourceGroup = resourceGroup
) on VMName
| project ResourceGroup, VMName, OSName, OSVersion

注意事项

  • 确保所有目标虚拟机已安装并启用Log Analytics代理,且代理能正常向工作区上报数据。
  • 若未配置WMI数据收集,需在Log Analytics工作区的“数据收集规则”中添加Win32_OperatingSystem类的收集配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:15:50