为什么 "Get-Vm | Sls PoweredOff" 不对已关闭的虚拟机进行 grep?

Why does "Get-Vm | Sls PoweredOff" not grep for VMs that are Powered off?

我正在尝试使用 PowerCLI 搜索已关闭电源的虚拟机列表。

我要搜索命令的结果Get-Vm:

Vm01 上电 1 16
Vm02 关机 1 16
等等

我想在此列表中搜索 "PoweredOff",但如果我键入以下内容,PowerShell Sls 似乎不起作用:

Get-Vm | sls PoweredOff

它不会显示已关闭电源的虚拟机。任何人都可以提供有关输出要搜索的文本流(而不是要搜索的对象列表)的任何指导吗?

PowerShell cmdlets return 对象,不是简单的文本输出。您可以使用 Where-Object cmdlet 按特定属性的值过滤输出。

Get-Vm | Where-Object { $_.PowerState -eq 'PoweredOff' }

表格或列表输出通常会显示 属性 个名字。然而,并非所有对象的属性都可能默认显示,有时特定类型的默认输出格式看起来与正常输出不同(例如 Get-Process 输出)。您可以使用 Get-Member cmdlet 获取对象的所有属性(和方法)的列表。添加参数 -Force 以包含固有属性。添加参数 -Static 以显示 class 方法而不是对象方法。

对于 VMware 的 cmdlet,您还可以查看 PowerCLI documentation,其中列出了 return 类型的 cmdlet。