【发布时间】:2014-04-15 18:03:27
【问题描述】:
我正在尝试指定命令的结构化顺序,并且我正在寻找一种比目前更简单的方法。我有一系列服务器的有序重启。服务器是分层的,因此必须按特定顺序关闭各层,然后以相反的顺序重新启动。时间也是一个问题,因为有很多服务器,我不想要大量的停机时间。
我有的是这个……
$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,然后进入我的验证循环(可能使用管道)。另外,有没有办法我可以制作一个“命令循环”,这样我就不必拥有这么长的难以管理的脚本?
【问题讨论】:
-
创建一个执行上述活动的作业(脚本块)(关闭 -> 验证 -> 停止)。这些应该并行执行。将作业分组为按顺序执行的层。为每一层创建一个列表,以按顺序放置已完成的作业。最后,反向浏览列表以调出服务器。
-
@MFT 说了什么。有关示例,请参见 here。
标签: powershell foreach vmware