2014-04-15 38 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)。 –

回答