问题运行脚本运行远程.exe



如果我在计算机上运行下面的脚本,它会按预期工作并安装。

Start-Process "C:Test_SoftwareTestConfigApp" " -s"

但是我需要远程运行。这是我的代码,但它不起作用。$Computer已定义,并且是正确的设备。我做错了什么?我有其他脚本,我远程运行到这个设备,所以我知道我正确地到达它,而不是被阻止。

Invoke-Command -ComputerName $Computer -ScriptBlock {Start-Process "C:Test_SoftwareTestConfigApp" " -s"}

Start-Process默认异步启动进程。也就是说,即使启动的进程仍在运行,控制权也会立即返回给PowerShell。

  • 本地调用中,启动的进程独立于调用进程存在于上。

  • 远程调用中,结束的远程会话自动终止通过Start-Process启动的进程。

这种不对称是由于技术原因而存在的,在GitHub issue #16001中有解释。


这意味着您的C:Test_SoftwareTestConfigApp进程很可能永远没有机会运行到完成,因为您的远程会话在Start-Process调用之后立即结束。

要确保这样做,将-Wait添加到Start-Process调用中:

Invoke-Command -ComputerName $Computer -ScriptBlock {
Start-Process -Wait 'C:Test_SoftwareTestConfigApp' '-s'
}

注意:

  • 远程命令在不可见的窗口站中运行,其中一些GUI应用程序可能会拒绝运行。当这种情况发生时,你需要寻找一种日志机制来帮助你排除故障;也许远程机器的事件日志提供了线索。

  • 相比之下,如果C:Test_SoftwareTestConfigApp恰好是一个控制台应用程序,您可以通过直接调用(这通常是调用控制台应用程序的正确方式-参见此答案)达到相同的效果-同步执行:

Invoke-Command -ComputerName $Computer -ScriptBlock {
# Only if the application is a *console* application.
C:Test_SoftwareTestConfigApp -s
}

最新更新