确定Powershell Remoting机器何时处于良好状态?

时间:2017-08-25 14:31:32

标签: powershell hyper-v powershell-remoting

更新 - 原始问题声称我能够成功执行Invoke-Command,然后很快就无法执行;我认为这是由于Windows升级后登录过程中的进程。

事实证明PC实际上正在启动,运​​行快速批处理/ cmd文件,然后重新启动。这导致能够进行PS Remoting然后突然没有。第一次启动后重新启动很快,我没有意识到它正在发生。抱歉这是个糟糕的问题。

好奇的是,由于Microsoft Deployment Toolkit就地升级过程的剩余部分,机器正在重新启动。 MDT完成升级后的任务序列的方式有很多原因,现在我有另外一个需要计算。

旧详细信息(不再相关,假设机器在第一次成功调用Invoke-Command后没有重新启动):

我使用PowerShell和PowerShell远程处理在Hyper-V中使用VM自动执行各种操作。我将启动一个VM,然后想通过PowerShell运行一些命令。

我正在努力确定何时可以通过Invoke-Command之类的东西安全地开始运行远程命令。我无法立即启动,因为我需要让机器启动。

现在我在调用之间调用VM一秒钟,直到以下函数返回$true

function VMIsReady {
[CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)][object]$VM
    )
    $heartbeat = $vm.Heartbeat
    Write-Host "vm heartbeat is $heartbeat"
    if (($heartbeat -eq 'OkApplicationsHealthy') -or ($heartbeat -eq 'OkApplicationsUnknown'))
    {
        try
        {
            Invoke-Command -VMName $vm.Name -Credential $(GetVMCredentials) {$env:computername} | out-null
        }
        catch [System.Management.Automation.RuntimeException]
        {
            Write-Host 'Caught expected automation runtime exception'
            return $false
        }
        Write-Host 'remoting ready'
        return $true
    }
}

这通常很有效;然而,在Windows升级发生后,存在问题。即使在VMIsReady返回$true之后,我也会收到各种类型的Hyper-V远程处理错误。

这些错误发生在VM升级后第一次用户登录的过程中(Windows通过“嗨;我们为您的PC提供了一些更新;这可能需要几分钟 - 不要关闭您的PC当。这个序列开始时,VMIsReady返回true - 我想我可能应该等到序列完成,但我不知道怎么知道它是什么时候。

有没有更好的方法来确定机器何时处于我可以预期远程工作没有问题的状态?也许是一种告诉用户何时完全登录的方法?

1 个答案:

答案 0 :(得分:0)

您可以使用Test-WSMan。

在调用上运行一个脚本,该脚本将从服务器接收响应。

[bool]$Response | Out-Null
try{
    $Response = Invoke-Command -ComputerName Test-Computer -ScriptBlock {return $true} 
}catch{
    return $false
}
if ($Response -ne $true){
    return $false
}else{
    return $true
}