【发布时间】:2018-01-30 13:40:33
【问题描述】:
我在尝试远程启动服务时遇到了奇怪的行为。
在服务器 A 上,我正在运行这一行(它是名为 RunRemoteService.ps1 的更大脚本的一部分):
Invoke-Command -ComputerName $B_comp -ScriptBlock {Powershell.exe -File "run_service.ps1"} -Credential $cred
脚本run_service.ps1 包含以下行(它也是更大脚本的一部分):
$my_service_name.Start()
现在奇怪的是,如果我在与服务器 B 有一个打开的远程连接 (mstsc) 时运行 RunRemoteService.ps1,那么脚本可以完美运行,并且 B 上所需的服务真的开始了。
但是,如果我在与服务器 B 没有 mstsc 连接时运行 RunRemoteService.ps1,则脚本失败(服务未启动)。
为什么会发生这种情况以及如何解决?
编辑:我对这个问题进行了更多研究,发现只有在尝试运行我的特定服务时才会发生这种情况。 这意味着我的服务必须从已登录用户的会话中运行(这就是为什么如果我之前 mstsc 到服务器它可以工作的原因)。 所以我想我的新问题是 - 有没有办法从 powershell 登录到远程机器?
谢谢。
【问题讨论】:
-
除非您的环境专门配置为允许它,否则将 RDP'd 到一台计算机并尝试在第二台计算机上运行命令将被视为双跳并被阻止:blogs.msdn.microsoft.com/knowledgecast/2007/01/31/…
-
好的,我不知道后台到底发生了什么,但我需要能够运行在远程机器上启动服务的远程脚本..
-
您可以通过在服务器 A 上启动 PSSession 然后尝试在服务器 B 上启动服务来验证它是否是双跳问题。如果访问被拒绝,则说明您遇到了双跳问题。我列出的文章显示了解决此问题的方法,但出于安全原因,并非所有网络团队都愿意这样做。如果您无法在您的环境中设置受信任的委派,那么您必须将脚本设置为服务器 A 上的计划任务。
标签: powershell windows-services remote-desktop powershell-remoting