我目前正在管理Selenium Grid,其中20台远程PC充当位于服务器上的单个Hub的节点。目前,当我想重新启动集线器或节点并清除任何陈旧的chromedriver或chrome实例时,我必须远程访问每台机器。我试图通过Powershell自动化这个过程。
到目前为止,我已经设法编写ps脚本来杀死PC上的chrome,chromedriver和java的任何实例,然后重新启动集线器或节点。它们在每台机器上本地启动时工作,但是当我尝试通过PSSession执行它们时失败。
我已成功启用每台计算机上的远程会话,并且我可以调用将取消现有java和chrome实例的Invoke-Commands,但我无法重新启动集线器或节点。
Hub powershell脚本示例:
#This script kills any existing java process and runs StartHub.bat
Set-Location C:\Selenium
kill -Name java -Force -PassThru -ErrorAction Continue
Start-Process -FilePath "C:\Selenium\StartHub.bat" -PassThru -Verbose
bat文件如下:
java -jar C:\Selenium\selenium-server-standalone-3.4.0.jar -role hub -hubConfig "V:\ServerFiles\hubconfig.json"
我一直在测试执行策略不受限制,我的网络管理员已经更改了GPO以允许我远程启动Java进程,但它只是不起作用。我尝试过几种方法,我在下面列出:
1:在远程服务器上输入PSSession并调用ps1文件:
C:\RestartHub.ps1
结果是现有的集线器实例被终止但新的实例未打开。
2:然后我尝试使用ScriptBlock调用cmd脚本启动作业以启动批处理文件:
Set-Location C:\Selenium
kill -Name java -Force -PassThru -ErrorAction Continue
Start-Job -ScriptBlock{cmd /c start "C:\Selenium\StartHub.bat"} -Name Hub -Verbose
这会再次杀死现有的集线器实例,但启动脚本不会以静默方式运行或失败。
我查看了远程计算机上的安全日志,看看是否存在任何问题,但使用具有完全管理权限的合适用户,PSSession似乎是正确的。
我还将远程计算机上的ExecutionPolicy
更改为restricted
,以查看是否显示访问被拒绝错误。我改回unrestricted
,错误就消失了。
我很感激任何想法。
答案 0 :(得分:1)
Start-Process
将从可执行文件启动进程,您不能将bat文件用作可执行文件,-FilePath
需要可执行文件的路径
见下文,
Start-Process cmd -Argumentlist "C:\Selenium\StartHub.bat" -PassThru -Verbose