【问题标题】:Determining when machine is in good state for Powershell Remoting?确定机器何时处于 Powershell Remoting 的良好状态?
【发布时间】:2026-01-13 19:05:01
【问题描述】:

更新 - 最初的问题声称我能够成功执行 Invoke-Command,但不久之后就无法执行;我认为这是由于 Windows 升级后登录期间正在进行的过程所致。

事实证明,PC 实际上正在启动,运​​行快速批处理/cmd 文件,然后重新启动。这就是导致能够进行 PS Remoting 然后突然不行的原因。首次启动后重新启动速度足够快,以至于我没有意识到它正在发生。抱歉问了一个不好的问题。

出于好奇,由于 Microsoft 部署工具包就地升级过程的残余,机器正在重新启动。 MDT 在升级后完成其任务序列的方式有很多问题,现在我要计算另一个。

旧的细节(不再相关,错误地假设机器在第一次成功调用命令后没有重新启动):

我在 Hyper-V 中使用 powershell 和 powershell 远程处理使各种事情自动化。我将启动一个 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 远程处理错误。

这些错误发生在虚拟机在升级后首次用户登录的过程中(Windows 出现“嗨;我们为您的 PC 提供了一些更新;这可能需要几分钟 - 不要关闭您的 PC ). VMIsReady 在此序列开始时返回 true - 我想我可能应该等到序列完成,但我不知道如何知道何时完成。

是否有更好的方法来确定机器何时处于可以预期远程处理正常工作的状态?也许是一种判断用户何时完全登录的方法?

【问题讨论】:

  • Test-WSMan 将测试 PS Remoting 所需的 WinRM 连接。
  • 谢谢,很高兴知道;不幸的是,测试 WinRM 连接性是不够的。在我描述的某些场景中,PS 远程处理最初是工作的,然后在用户登录期间停止,然后又开始工作。

标签: powershell hyper-v powershell-remoting


【解决方案1】:

您可以使用 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
}

【讨论】:

  • 这就是我现在基本上正在做的事情。我刚刚意识到我的问题是垃圾,所以我会更新实际发生的事情。
最近更新 更多