PowerShell“if”机制依赖于VM状态

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

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

我觉得有必要有更好的方式来做这件事,但我不知道它是什么。 我不认为这样做是一个坏的方法,但是当我正在努力学习时,我想知道是否有更好的方法,如果这一个不好的方法,为什么呢?

编辑:

正如在第一个答案中提到的,我唯一的想法是转换为一个string来检查对象的属性,我正在寻找。 我想如果有一种方法来做到这一点,而不将我的输出转换为一个string,这实际上是我在找什么。

Format-* cmdlet(您的flFormat-List )将格式化输出以在控制台中查看。 不要重新parsing它们的值。 收集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' } 

我不认为这是一个不好的做法

这是一个不好的方法,但这不是你的错。 一开始Powershellers就开始尝试串起来了。 没有深入研究Powershell对象,这种方法最糟糕的部分就是失去了由Get-VM返回的对象的内置(属性,方法,pipe道能力)的有效性。