通过 Powershell 连接到远程机器

Connect to Remote machines through Powershell

我们在客户所在地有 8 台机器。我们将这 8 台机器用于我们的自动化测试执行。问题是,如果来自海外位置的任何人通过 RDP 连接到这些机器,然后机器在 15 分钟左右后开始显示锁定屏幕,我们的自动化脚本开始失败或没有截图。

所以我编写了一个 powershell 脚本来远程重启这台机器(比如机器 1),然后执行所需的 bat 文件,该文件将触发执行。重新启动进行得很好,看起来像 bat 文件被打开,因为我们的框架读取文件和状态,集中报告更改为正在执行。问题是,它只在很长一段时间内保持执行状态,如果我连接到机器(即机器 1)以检查它卡住的原因,机器将以相同的方式打开 post 重新启动(即应用策略设置等,开始加载所有启动程序/文件)并且 bat 文件未打开,甚至进程在任务管理器中也不可见。那么我下面的代码到底在哪里执行?是否在不同的会话中。我如何确保此 bat 文件成功执行并在机器中继续 运行 并且当我连接时我能够看到相同的内容。

Enter-PSSession -ComputerName MachineName -Credential Username

Restart-Computer -ComputerName MachineName-Force -Credential Username

Set-Location -Path C:\dev\orcas-agent-uft-deployment

Start-Process "cmd" -ArgumentList "/c","C:\dev\AgentUFT\AgentUFT.bat" 
 -WorkingDirectory "C:\dev\AgentUFT"  -WindowStyle Maximized

我是不是做错了什么?重新启动后,我等待 5 分钟,然后触发启动过程

几件事...

当您启动交互式会话时,您的终端提示应该改变;例如,连接到 foo:

PS C:\> Enter-PSSession -ComputerName 'foo'
[foo]: PS C:\> ....

如果您没有看到类似的行为,我认为您没有连接。

我会重启主机然后建立连接。我会认为(以为我还没有确认)重新启动主机会破坏远程交互会话。

Restart-Computer -ComputerName MachineName-Force -Credential Username
Enter-PSSession -ComputerName MachineName -Credential Username
Set-Location -Path C:\dev\orcas-agent-uft-deployment
...

我不确定以下内容是否会按您期望的方式工作。这将在远程计算机(不是您的计算机)上启动一个进程。

Start-Process "cmd" -ArgumentList "/c","C:\dev\AgentUFT\AgentUFT.bat" 
 -WorkingDirectory "C:\dev\AgentUFT"  -WindowStyle Maximized

当您登录主机时,您不会看到终端 window 打开。如果您想查看远程机器上的会话是什么,请键入 $PID,然后通过 运行 执行以下操作在远程机器上查找该进程 ID:

Get-Process -Id 72 -ComputerName foo

就是说,为什么不只是 运行 来自交互式会话的批处理命令?您也可以仅 运行 来自 Invoke-Command 的命令。所有这些选项都会让您更好地了解脚本遇到的错误。

查看这些参考资料...

Powershell 核心 (PS 6) https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/running-remote-commands?view=powershell-6

Windows Powershell (PS 5.1) https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/running-remote-commands?view=powershell-5.1