【问题标题】:Powershell Start-Process does not start the process on remote machinePowershell Start-Process 不会在远程机器上启动进程
【发布时间】:2016-04-18 21:18:40
【问题描述】:

我正在开发一个我必须启动一个应用程序并且这个应用程序应该在后台运行的作品。我尝试了 Start-Process cmdlet,如下所示:

try {
    Invoke-Command -Session $newsession -Scriptblock {
      Write-Host "Cd'ing and starting Vesper on" $loadvm
      Start-Process cmd -ArgumentList "/c C:\vesper_cpt\Vesper.exe -auto" -verb runas
    } -ErrorAction Stop
} catch [Exception] {
    echo "Error while running the remote command", $_.Exception.GetType().FullName, $_.Exception.Message
    Remove-PSSession $newsession
    exit 1
}

删除-PSSession $newsession

发生的事情是我可以看到它在目标机器上启动了一个 cmd 进程,但随后它立即消失了。我不确定我应该在这里做什么才能让该过程始终启动并运行。另一方面,我也尝试了 Invoke-Expression cmdlet,通过这个我可以看到进程在远程机器上启动良好,但 powershell 脚本永远不会返回,这就是为什么考虑使用 Start-Process .有什么建议吗?

【问题讨论】:

  • “我不确定我应该怎么做才能让该进程始终启动并运行” - 嗯,将其作为服务安装在所述远程机器上?如果要排除故障,请将*> C:\output.log 附加到参数字符串并查看远程计算机上的日志文件
  • "C:\vesper_cpt\Vesper.exe" - 这个文件是在本地还是远程机器上?您不能在远程机器上运行本地可执行文件。
  • 是的,C:\vesper_cpt\Vesper.exe 是远程机器上的一个文件。请注意,上面的代码不是完整的脚本。它首先创建与远程机器的会话,然后开始执行 Vesper.exe。所以,我正在使用 powershell 在远程机器上启动应用程序 Vesper
  • @MathiasR.Jessen:我需要它作为应用程序而不是服务

标签: powershell start-process


【解决方案1】:

在尝试了 Invoke-Expression、Start-Process 之类的很多东西后,我找到了我的进程在远程计算机上启动后退出的原因。原因是我正在运行的应用程序是 Java 应用程序。而且,JVM 不允许守护线程在机器上运行进程。另一方面,如果至少有一个用户线程处于活动状态,Java 运行时不会终止您的应用程序。

在我的设置中,我在远程机器上运行应用程序(在本例中为 Vesper.exe),所以我创建了一个 New-PSSession,最后,我删除了-PSSession。因此,没有剩余的用户线程可以运行应用程序,因此应用程序正在关闭。

解决此问题的方法是Removing-PSSession,您将执行Exit-PSSession。 Exit-PSSession,使线程保持活动状态并且您的应用程序不会终止。请注意,如何退出应用程序是您的责任,因为即使您的程序完成,应用程序仍会在远程计算机上运行。

try {
    Invoke-Command -Session $newsession -Scriptblock {
      Write-Host "Cd'ing and starting Vesper on" $loadvm
      Start-Process cmd -ArgumentList "/c C:\vesper_cpt\Vesper.exe -auto" -verb runas
    } -ErrorAction Stop
} catch [Exception] {
    echo "Error while running the remote command", $_.Exception.GetType().FullName, $_.Exception.Message
    Remove-PSSession $newsession
    exit 1
}

Exit-PSSession

如果异常被捕获,这取决于你想要做什么。您可以根据您的环境设置删除或退出会话。

我从以下两个问题中找到了答案:

希望这会有所帮助。

谢谢

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多