【发布时间】: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:我需要它作为应用程序而不是服务