這裏是場景 - 我通過Powershell/PowerCLI(VMwares Powershell模塊)遠程啓動虛擬機,一旦虛擬機啓動,我將針對虛擬機運行一系列cmdlet。Powershell/PowerCLI循環,超時和退出
目前我有這段代碼:
Start-VM "my VM Name" -runAsync
$vm = Get-VM | where { $_.name -eq "my VM Name" }
start-sleep -seconds 20
do {
start-sleep -seconds 5
$toolsStatus = ($VM | Get-View).Guest.ToolsStatus
} until ($toolsStatus -eq 'toolsOK')
其中一期工程 - 虛擬機啓動循環將檢查,直到VMware Tools是爲VMware(這意味着虛擬機完全啓動進入OS)報告中。
但是,這會無限期地運行,所以在虛擬機無法成功引導的情況下 - 腳本掛起。所以,我試圖在計時器添加它是否運行了5分鐘過去了退出腳本:
Start-VM "My VM Name" -runAsync
$VM = Get-VM | where { $_.name -eq "My VM Name" }
$timeout = new-timespan -minutes 5
start-sleep -seconds 5
$toolsStatus = ($VM | Get-View).Guest.ToolsStatus
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout) {
if ($toolsStatus -eq 'toolsOK') {
return
}
start-sleep -seconds 5
}
Exit
成功地退出5分鐘後腳本。這個問題是,當我測試這個 - 虛擬機已啓動,我得到一個響應,表明VMtools已迴應,但循環不停止。它會一直持續到超時退出,而不是進入下一步。
我沒有使用過這種類型的循環,因此我會確定我很接近 - 但我錯過了一些東西。
啊!我以爲我錯過了一些東西 - 修復了我的循環! – TheDemonLord