2014-09-26 44 views
0

我有一段脚本来做一些虚拟机上的东西。这里是:像在Where-Object无法在PowerShell 2中工作

$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 

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

任何想法如何使其正常工作?

+0

'-Like'是在3.0中引入的[technet](http://technet.microsoft.com/zh-cn/library/hh849715.aspx ) – Matt 2014-09-26 15:31:01

+0

任何替代品?然后我不知道为什么它不会出错。它只是没有做什么 – Migol 2014-09-26 15:35:10

+0

'$ powered | Where-Object {名称 - 如“VM-TEST4-WEB *”}。我确定'-match'也可以在没有星号的情况下工作 – Matt 2014-09-26 15:43:13

回答

3

在3.0中引入了简化的对象语法(包括类似开关参数)。类操作符在标准的where对象语法中工作正常。你想是这样的:

Where-Object {$_.Name -like "VM-TEST4-WEB*"} 

编辑:
在3.0中加入的样参数,其中对象(它看起来像在简化的语法运营商)。类似的比较运算符已经在PowerShell中,因为1.0

相关问题