就像Where-Object在PowerShell 2中不起作用一样

Mig*_*gol 1 powershell powershell-2.0

我有一个脚本可以在虚拟机上做一些事情。这里是:

$powered = Get-VM VM-TEST4-* | Where-Object { $_.PowerState -eq 'PoweredOn'
ForEach-Object -InputObject $powered { Shutdown-VMGuest -VM $_ }

# taking snapshots etc etc

# BELOW FAILS
# start up machines in order

Where-Object -Like -Property Name -InputObject $powered -Value "VM-TEST4-DB*" | ForEach-Object { if ($_ -ne $null) { Start-VM -VM $_ } }
sleep -Seconds 180
Where-Object -Like -Property Name -InputObject $powered -Value "VM-TEST4-AUX*" | ForEach-Object { if ($_ -ne $null) { Start-VM -VM $_ } }
sleep -Seconds 180
Where-Object -Like -Property Name -InputObject $powered -Value "VM-TEST4-WEB*" | ForEach-Object { if ($_ -ne $null) { Start-VM -VM $_ } }
sleep -Seconds 180
Run Code Online (Sandbox Code Playgroud)

我对这段代码的问题是什么都没有开始,我只是等待。现在其背后的想法是过滤出正确的服务器类型,以便 DB 早于 AUX 和 WEB 启动,而$_ -ne $null检查如果没有返回结果则可以保护我Where-Object(我们的环境没有 AUX 服务器)。

知道如何让它正常工作吗?

Mik*_*ard 5

3.0 中引入了简化的 where-object 语法(包括 -like 开关参数)。-like 运算符在标准 where-object 语法中工作良好。你想要这样的东西:

Where-Object {$_.Name -like "VM-TEST4-WEB*"}
Run Code Online (Sandbox Code Playgroud)

编辑:
在 3.0 中添加了 where-object 的 -Like 参数(看起来像简化语法中的运算符)。自 1.0 起,PowerShell 中就出现了进行字符串比较的 -Like 运算符