Powershell Start-Process不会在远程计算机上启动该过程

时间:2016-04-18 21:18:40

标签: powershell start-process

我正在开发一个我必须启动应用程序的部分,这个应用程序应该继续在后台运行。我尝试了如下的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
}

Remove-PSSession $ newsession

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

1 个答案:

答案 0 :(得分:3)

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

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

对此的解决方案是删除-PSSession ,而不是 Exit-PSSession 。退出-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

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

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

希望这有帮助。

由于