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

如何让Hyper-V的Get-VM命令输出统一的非本地化状态值?

解决方案:获取Hyper-V虚拟机非本地化状态值

直接使用虚拟机对象的OperationalStatus属性,而非Status属性,就能拿到不受系统语言影响的枚举值:

方法1:直接读取枚举状态

OperationalStatus返回的是[Microsoft.HyperV.Powershell.VMOperationalStatus]枚举类型的数组,每个成员都是英文名称(如Ok、MergingDisks),完全不依赖系统本地化设置:

# 获取第一台虚拟机的所有操作状态枚举
$vmOperationalStatus = (Get-VM)[0].OperationalStatus

# 检查是否包含特定状态
if ($vmOperationalStatus -contains [Microsoft.HyperV.Powershell.VMOperationalStatus]::Ok) {
    Write-Host "虚拟机处于正常运行状态"
}

# 转换为枚举对应的整数值
$statusValue = [int]$vmOperationalStatus[0]

方法2:从本地化Status字符串反推枚举(如果必须用Status)

如果因为某些场景只能拿到本地化的Status字符串,可以通过枚举成员的DisplayName属性匹配,反向获取英文枚举名:

$localizedStatus = (Get-VM)[0].Status
$enumType = [Microsoft.HyperV.Powershell.VMOperationalStatus]

# 匹配对应枚举成员
$targetEnum = $enumType.GetFields() | Where-Object {
    $_.GetValue($null).DisplayName -eq $localizedStatus
} | Select-Object -ExpandProperty Name -First 1

# 输出结果,比如法语系统下会返回"Ok"对应"Fonctionnement normal"
Write-Host "对应的非本地化状态名:$targetEnum"

关键说明

  • Status属性是给用户看的本地化友好名称,而OperationalStatus是Hyper-V底层使用的枚举值,不受系统语言影响,是脚本中判断状态的首选属性。
  • 你的PowerShell 5.1环境完全支持这个属性,无需修改会话语言或额外配置。

内容的提问来源于stack exchange,提问作者Orsiris de Jong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:03