Powershell启动过程找不到文件

时间:2019-10-15 14:34:48

标签: powershell

我正在尝试通过PowerShell远程从客户端升级具有特定应用程序的服务器:

Invoke-Command -ComputerName $server -Credential $mycreds {Start-Process -FilePath "C:\temp\xxx.exe"   -ArgumentList "-default", "-acceptEULA" -wait }

无论我如何尝试,都会收到类似“找不到指定的文件...”的消息,我该怎么办? FilePath在本地(客户端)计算机上。

1 个答案:

答案 0 :(得分:1)

您的C:\temp\xxx.exe可执行文件必须存在于服务器(远程计算机)上,才能使命令起作用,因为这是脚本块({ {1}})执行。

注意:相反,如果将{ ... }Invoke-Command参数一起使用,以运行本地存在的 script 文件(-FilePath)在远程运行时,PowerShell 自动将其复制到远程计算机;来自the docs:“使用此参数时,PowerShell会将指定脚本文件的内容转换为脚本块,将该脚本块传输到远程计算机,然后在远程计算机上运行。”

要从本地(客户端)计算机上复制可执行文件,由于使用了{{1},因此您需要采用四步方法( PSv5 + } [1] ):

  • 使用New-PSSession

  • 显式创建到.ps1的远程会话
  • 使用Copy-Item及其Copy-Item -ToSession参数将本地(客户端)可执行文件复制到该会话(远程计算机)

  • 使用$server参数(而不是
    -ToSession)运行Invoke-Command命令,以便在显式创建的会话中运行(并非严格如此)是必要的,但无需创建另一个(临时)会话。

  • 运行Remove-PSSession以关闭远程会话。

重要:在PowerShell远程会话中,您无法运行需要交互式用户输入 外部程序

  • 虽然您可以启动 GUI 应用程序,但它们始终会运行 invisible

  • 类似地,不支持交互式 console 应用程序(尽管客户端收到控制台应用程序 output )。 / p>

但是,支持 PowerShell命令中的交互式提示

将它们放在一起:

-Session

[1]如果您正在运行 Powershell v4或更低版本,请考虑下载 psexec