繁体   English   中英

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

[英]Determining when machine is in good state for Powershell Remoting?

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

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

出于好奇,计算机由于Microsoft Deployment Toolkit就地升级过程的残留而重新启动。 由于多种原因,MDT完成升级后任务序列的方式是有问题的,现在我还需要数一数。

旧的详细信息(不再相关,错误地假设机器在首次成功执行Invoke-Command之后没有重新启动):

我正在使用powershell和powershell远程处理功能在Hyper-V中使VM自动化。 我将启动一个VM,然后想通过Powershell在其上运行一些命令。

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

现在,我在两次调用之间睡眠一秒钟,以轮询虚拟机,直到以下函数返回$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的电源)。”在此序列开始时会正确返回true-我想我可能应该等到序列完成后,但是我不知道如何知道何时开始。

有没有更好的方法来确定计算机何时处于可以期望远程无故障运行的状态? 也许一种告诉用户何时完全登录的方法?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM