【问题标题】:Starting Service on remote server failed在远程服务器上启动服务失败
【发布时间】: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


【解决方案1】:

如果您不能按照@EBGreen 的建议使用凭证委托。尝试使用 psexec.exe 调用脚本而不是 PowerShell 远程处理。

psexec \\server "cmd /c powershell.exe -f c:\script.ps1"

从 sysinternals.com 获取 psexec

【讨论】:

    【解决方案2】:

    好的,所以我的问题已经演变和修改,所以这个解决方案是针对我遇到的最新问题 - 如果没有用户登录到远程计算机,我无法远程启动我的服务。

    解决方案是一种变通方法:

    1. 我在远程服务器上配置了自动登录(使用 sysinternals 自动登录工具)。

    2. 我在测试开始时使用了Restart-Computer cmdlet。

    3. 现在重启完成并恢复 ps-session 后,用户自动登录到服务器,我可以远程启动我的服务。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      相关资源
      最近更新 更多