Изменения в поведении Powershell foreach в ISE против CLI - PullRequest
0 голосов
/ 27 сентября 2018

В Powershell ISE первое условие выполнено.При запуске этого же точного сценария в CLI он пропускает оператор if, несмотря на то, что его условие одинаково.CLI просто выводит конечный оператор else.Кажется, он даже не оценивает первые 2 утверждения.Есть идеи?

foreach ($vm in (Get-VM -Name $vm)) {
    if($vm.ExtensionData.Runtime.PowerState -eq "poweredOn") {
        Shutdown-VMGuest -VM $vm -Confirm:$false
        while ($vm.ExtensionData.Runtime.PowerState -eq "poweredOn" -and ($x++ -lt 60))
        {
            Start-Sleep -Seconds 1
            $vm.ExtensionData.UpdateViewData("Runtime.PowerState")
            Write-Output "Waiting for $vm to shutdown gracefully. Took $x`s."
            if ($x -gt 5) {
                Write-Output "Forcefully powering off VM $vm"
                Stop-VM $vm -Confirm:$false
            }
        }
    }
    elseif($vm.ExtensionData.Runtime.PowerState -eq "poweredOff") {
        $DateTime = "$date"+"_autosnap"
        New-Snapshot -VM $vm -Name ("$date"+"_autosnap")
        Start-VM -VM $vm
    }
    else {
        Write-Host "Snapshot failed. Machine is not shutdown."
    }
    Write-Host "Cleaning up previous snapshots for $vm"
    Get-Snapshot -VM $vm | Where-Object {$_.Name -match "$retention"+"_autosnap"} | Remove-Snapshot
} 

1 Ответ

0 голосов
/ 01 октября 2018

Я хотел бы взглянуть на изменение использования переменной $vm, это может привести к путанице для терминала и ISE.

Возможно, вместо этого вместо переменной, используемой в параметре Name, будет $vmname.Пусть это будет выглядеть примерно так:

foreach ($vm in (Get-VM -Name $vmname)) {
...