尝试远程启动服务时遇到奇怪的行为。
服务器A
上的我正在运行此行(它是名为RunRemoteService.ps1
的较大脚本的一部分):
Invoke-Command -ComputerName $B_comp -ScriptBlock {Powershell.exe -File "run_service.ps1"} -Credential $cred
脚本run_service.ps1
包含以下行(它也是更大脚本的一部分):
$my_service_name.Start()
现在这里有一个奇怪的事情,如果我在打开远程连接(mstsc)到服务器RunRemoteService.ps1
时运行B
,那么脚本工作正常,B上所需的服务是真的开始了。
但是,如果我在与服务器RunRemoteService.ps1
没有mstsc连接时运行B
,则脚本失败(服务无法启动)。
为什么会发生这种情况?如何解决?
编辑:我更多地探讨了这个问题,发现只有在尝试运行我的特定服务时才会发生这种情况。 这意味着我的服务必须从已经登录的用户的会话中运行(这就是为什么如果我以前在服务器上工作它的原因)。 所以我想我的新问题是 - 有没有办法从PowerShell登录到远程机器?感谢。
答案 0 :(得分:0)
如果您不能使用@EBGreen建议的凭证授权。尝试使用psexec.exe来调用脚本而不是PowerShell远程处理。
psexec \\server "cmd /c powershell.exe -f c:\script.ps1"
从sysinternals.com获取psexec
答案 1 :(得分:0)
好的,所以我的问题已经得到了改进和修改,所以这个解决方案是针对最新的问题 - 如果没有用户登录到远程计算机,我无法远程启动我的服务。
解决方案是一种解决方法:
我在远程服务器上配置了自动登录(使用sysinternals自动登录工具)。
我在测试开始时使用了Restart-Computer
cmdlet。
现在重启完成并恢复ps-session后,用户自动登录到服务器,我可以远程启动服务。
感谢。