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

如何通过Azure PowerShell获取原地升级Azure VM的操作系统详情

获取Azure原地升级VM的真实操作系统信息

问题背景

使用Get-AzVM获取VM的镜像元数据时,部分经原地升级的Azure VM会出现StorageProfile.ImageReference.Offer/Sku与实际操作系统不一致的情况(例如原镜像为Windows 10,升级到Windows 11后,元数据仍显示Windows 10相关信息),需要通过PowerShell获取VM的真实操作系统信息,期望输出格式为Windows (Windows 11 Enterprise)。

解决方案

由于原地升级是在VM内部完成的系统更新,Azure的VM元数据不会自动同步更新,因此需要直接在VM内部查询操作系统的实际信息。可以通过Invoke-AzVMRunCommand在目标VM上执行本地命令获取真实OS信息:

Windows VM脚本示例

# 定位目标VM
$vm = Get-AzVM -ResourceGroupName my-rg -Name myhostname1

# 在VM内部执行命令获取真实OS信息
$osResult = Invoke-AzVMRunCommand -ResourceGroupName $vm.ResourceGroupName `
                                  -VMName $vm.Name `
                                  -CommandId 'RunPowerShellScript' `
                                  -ScriptString @"
# 获取操作系统显示名称
$osCaption = (Get-CimInstance Win32_OperatingSystem).Caption
# 确定操作系统家族
$osFamily = if ($osCaption -match 'Windows') { 'Windows' } else { 'Unknown' }
# 输出期望格式的结果
Write-Output "$osFamily ($osCaption)"
"@

# 提取并打印结果
$realOsInfo = $osResult.Value[0].Message.Trim()
Write-Output $realOsInfo

Linux VM脚本示例(可选)

如果是Linux VM,可修改脚本内的执行命令为:

$osResult = Invoke-AzVMRunCommand -ResourceGroupName $vm.ResourceGroupName `
                                  -VMName $vm.Name `
                                  -CommandId 'RunShellScript' `
                                  -ScriptString @"
osFamily="Linux"
osCaption=$(lsb_release -d | awk -F':\t' '{print $2}')
echo "$osFamily ($osCaption)"
"@

注意事项

  • 目标VM必须已启用Azure VM代理,否则无法执行Invoke-AzVMRunCommand。
  • 当前执行PowerShell的账号需要拥有对该VM的Microsoft.Compute/virtualMachines/runCommand/action权限。
  • Get-CimInstance是Get-WmiObject的替代方案,兼容性更好,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:18:23