2014-04-15 39 views
1

我想指定一个结构化的命令顺序,我正在寻找比我目前更简单的方法。我有一系列服务器的有序重启。服务器处于分层状态,因此必须按特定顺序关闭层,然后以相反的顺序重新启动。时间也是一个问题,因为有很多服务器,我不想要大量的停机时间。ForEach-Object操作Powershell

什么我是这样的......

$Servers | Where-Object {$_.Tier -match "App"} | ForEach-Object { 
    Shutdown-VMGuest -VM $_.Name -Confirm:$false | Out-Null 
    } 
$Servers | Where-Object {$_.Tier -match "App"} | ForEach-Object { 
    while(((Get-VM $_.Name).PowerState -ne "PoweredOff") -and ($sw.Elapsed.TotalSeconds -lt $timeout)) { 
    Start-Sleep -Seconds 5 
    } 
if ((Get-VM $_.Name).PowerState -ne "PoweredOff") { 
    Stop-VM -VM $_.Name -Confirm:$false | Out-Null 
    } 
} 

我然后就一遍又一遍地重复这个代码的所有层次的。有没有更简单的方法来关闭FIRS服务器,然后进入我的验证循环(也许使用管道)。另外,有没有办法让我可以做一个“命令循环”,所以我不必有这么长的难以管理的脚本?

+3

创建执行上述活动的作业(脚本块)(关机 - >确认 - >停止)。这些应该并行执行。将作业分组成层,依次执行。为每个层次创建一个列表,以便按顺序放置完成的作业。最后,反过来浏览列表以调出服务器。 – MFT

+2

@MFT说什么。有关示例,请参见[这里](http://stackoverflow.com/a/18193195/1630171)。 –

回答