我是 PowerShell 新手,正在尝试编写一个依赖于 Hyper-V VM 状态的脚本。这是我的(基本)if 语句:
if((get-vm WMDC2 | out-string) -like '*Running*') { echo "running"}
我觉得一定有更好的方法,但我不知道是什么。我不认为这是一种坏方法,但当我努力学习时,我想知道是否有更好的方法,如果这个是这样做不好,为什么。
编辑:
正如第一个答案中提到的,我唯一的想法是转换为字符串,以根据我正在寻找的内容检查对象的属性。我希望有一种方法可以做到这一点,而无需将我的输出转换为字符串,而这基本上就是我所寻找的。
答案1
这Format-*
cmdlet(您的fl
是Format-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
。