通过Powershell连接到远程计算机

时间:2019-04-22 11:51:58

标签: powershell remote-desktop

我们在客户位置设置了8台机器。我们将这8台机器用于自动化测试执行。问题是,如果任何离岸位置的人都通过RDP连接到这些计算机,则计算机在15分钟左右后开始显示锁定屏幕,并且我们的自动化脚本开始失败或没有截图。

因此,我编写了一个powershell脚本来远程重新启动此计算机(例如1号计算机),然后执行所需的bat文件,该文件将触发执行。重新启动进行得很好,并且好像bat文件正在打开,因为我们的框架读取文件和集中报告执行状态中的状态。问题是,它仅保持很长时间处于执行状态,如果我连接到机器(即机器1)以检查其卡住的原因,机器将以重启后的相同方式打开(即,应用策略设置等,开始加载)所有启动程序/文件)和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分钟,然后触发启动过程

1 个答案:

答案 0 :(得分:0)

几件事...

启动交互式会话时,终止应更改外观;例如,连接到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

登录到主机后,您不会看到终端窗口打开。如果要查看远程计算机上的会话是什么,请键入$PID,然后通过运行以下命令在远程计算机上查找该进程ID:

Get-Process -Id 72 -ComputerName foo

也就是说,为什么不从交互式会话中批量运行命令?您也可以只从Invoke-Command单独运行命令。所有这些选项将使您更好地了解脚本遇到的错误。

查看这些参考...

Powershell Core(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