PowerShell 的“if”机制依赖于虚拟机状态

PowerShell 的“if”机制依赖于虚拟机状态

我是 PowerShell 新手,正在尝试编写一个依赖于 Hyper-V VM 状态的脚本。这是我的(基本)if 语句:

if((get-vm WMDC2 | out-string) -like '*Running*') { echo "running"}

我觉得一定有更好的方法,但我不知道是什么。我不认为这是一种坏方法,但当我努力学习时,我想知道是否有更好的方法,如果这个这样做不好,为什么。

编辑:

正如第一个答案中提到的,我唯一的想法是转换为字符串,以根据我正在寻找的内容检查对象的属性。我希望有一种方法可以做到这一点,而无需将我的输出转换为字符串,而这基本上就是我所寻找的。

答案1

Format-*cmdlet(您的flFormat-List) 用于格式化输出以便在控制台中查看。不要重新解析它们的值。收集由 返回的对象Get-VM并直接访问属性。

# Get the VM object
$vm = Get-VM WMDC2
# check if the 'state' property equals 'Running'
if ($vm.state -eq 'Running') {
   Write-Host 'Running'
}

如果由于某种原因您确实不想存储 VM 对象,您也可以像这样简写它。

if ((Get-VM WMDC2).state -eq 'Running'){
  Write-Host 'Running'
}

我不认为这是个坏办法

这是一种糟糕的做法,但这不是你的错。Powershell 初学者通常会尝试将所有东西都字符串化。无需深入研究 Powershell 对象,这种方法最糟糕的部分是,你会失去 所返回对象的内置实用性(属性、方法、管道能力)Get-VM

相关内容