这里是场景 - 我通过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