暂停失败,重试CSV

时间:2016-02-01 16:01:13

标签: powershell powercli

我有两部分PowerShell代码,在失败时退出脚本。在考虑之后,我意识到暂停故障并允许管理员时间进行修复会更有意义......然后当任意键暂停时,重试CSV中的同一行。以下是它现在的样子:

#check tools status first
Write-Host ""
Write-Host "Checking VMware Tools Status before proceeding." -foreground green
Write-Host ""
foreach ($item in $vmlist) {
    $vmname = $item.vmname
    $ToolsStatus = (Get-VM $vmname).extensiondata.Guest.ToolsStatus -eq "toolsNotRunning"
    if ($ToolsStatus -eq $true) {
        Write-Host ""
        Write-Host "Tools is not installed or running on $vmname. Remediate on guest and restart the script" -foreground Yellow
        Write-Host "Script will continue to exit until tools is running on $vmname" -foreground yellow
        Write-Host ""
        exit
    } else {
        Write-Host ""
        Write-Host "Tools running on all VMs, script will continue" -foreground green
        Write-Host ""
    }
}

我知道如何将暂停放在$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')中,但我不知道如何进行循环以便重试。

我在其他地方使用类似的代码验证虚拟机已启动,因此这将在两个部分都有效。

编辑:这是重新编写的脚本。这会有用吗?

foreach ($item in $vmlist) {
    $vmname = $item.vmname
    do {
        $ToolsStatus = (Get-VM $vmname).extensiondata.Guest.ToolsStatus -eq "toolsNotRunning"
        if ($ToolsStatus) {
            Write-Host ""
            Write-Host "Tools is not installed or running on $vmname." -Foreground yellow
            Write-Host "Remediate VMware tools on $vmname and"
            Write-host "Press any key to retry..."
            $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
        }
    } until ($ToolsStatus -eq "PoweredOn")
    Write-Host "Tools running on $vmname, script will continue" -Foreground green
}

1 个答案:

答案 0 :(得分:1)

添加一个嵌套的do..while循环:

foreach ($item in $vmlist) {
    $vmname = $item.vmname
    do {
        $ToolsMissing = (Get-VM $vmname).extensiondata.Guest.ToolsStatus -eq "toolsNotRunning"
        if ($ToolsMissing) {
            Write-Host "Tools is not installed or ..." -Foreground yellow
            $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
        }
    } while ($ToolsMissing)
}

Write-Host "Tools running on all VMs, script will continue" -Foreground green