使用参数列表在服务器上调用远程 .exe

Invoke remote .exe on server with argument list

我是 PowerShell 的新手,希望就我尝试执行的命令提出问题 运行。

我已经阅读并阅读了我能找到的所有内容,如果我问的是不可能的或愚蠢的问题,请提前致歉。

从远程计算机上的 Windows CLI,我可以 运行 以下命令; 'c:\config-files\app.exe foo /o /last' exe 通过读取 foo 文件生成输出文件并将其保存为 foo.txt。

app.exe doesn't exist in within the c:\config-files, when running it on the computer the app.exe is in the local env path within c:\main-app.

- 以上是这里的关键点之一,已在下面的回复中解决。

我试过向 exe 添加路径,但在执行以下操作时似乎被忽略了;

path='c:\main-app\'
& Invoke-Command -ComputerName foo -ScriptBlock { & cmd.exe /c "c:\config-files\app" } -ArgumentList 'foo', '/last', '/o'

以上失败(对某些人来说可能是显而易见的!)

如果我运行:

Invoke-Command foo  -ScriptBlock {& cmd.exe /c "c:\main-app\app" }

PowerShell window 中的应用程序 运行,我刚才似乎无法向应用程序发送参数。

Invoke-Command -Computername foo -ScriptBlock {param ($myarg) "cmd.exe /c c:\main-app\app" $myarg } -ArgumentList 'foo', '/last', '/o'

这是我认为最接近的,但它只读取一个参数,并且是从尝试执行命令的用户的文档和设置文件夹中调用的,而不是二进制文件的路径。

我已经尝试了很多很多方法来完成这项工作,但似乎仍然无法克服这一点,我们将不胜感激您能提供的任何帮助。

提前感谢您的宝贵时间。

  • 您不需要 cmd /c 来调用控制台应用程序(或任何外部程序)。

  • 要从脚本中访问传递给脚本块的参数,请使用自动 $Args 数组或显式声明参数(正如您尝试使用 单个参数).

  • 您可以直接使用数组将其元素作为单独的参数传递给外部程序。

Invoke-Command -Computername foo -ScriptBlock { 
  c:\main-app\app $Args  # invoke app.exe, passing arguments through
} -ArgumentList 'foo', '/last', '/o'

此外,您提到想要将作为文件路径的参数解释为相对于应用程序所在的目录;最简单的解决方案是先使用 Set-Location 命令:

Invoke-Command -Computername foo -ScriptBlock { 
  Set-Location c:\main-app
  .\app $Args 
} -ArgumentList 'foo', '/last', '/o'