如何在远程计算机上执行PowerShell脚本?

29

我试图在远程计算机上执行一个脚本。

我在远程机器上执行了 "Enable-PSRemoting" 命令。

我将脚本 hello.ps1 放在远程计算机上。

[我的客户机是Windows XP,远程计算机是Windows 2003]

然后我尝试从客户机上执行该脚本。

invoke-command -computer $MachineName -filepath "C:\hello.ps1"

我遇到了以下错误:

Invoke-Command : 无法找到路径'C:\hello.ps1',因为它不存在。

我认为它尝试从客户机查找脚本。

如果我尝试运行

invoke-command -computer $MachineName -command { C:\hello.ps1 },它会在客户端执行远程机器中的可用脚本。

但是我想在远程机器本身上执行远程脚本。

如何才能使其运行在远程机器上,并使用那里的脚本?

更新:

实际上,该命令“invoke-command -computer $MachineName -command { C:\hello.ps1 }”在远程端起作用,并将结果返回给客户端。通过看到返回值,我误解了它在客户端上执行。


4
我爱你。在您发布帖子5年后,经过数天的谷歌搜索和试图使用Invoke-yadayada的各种配置,几乎要放弃时,我看到了您上面的“更新:”部分,并尝试了那个方法。它给了我同样的错误,但是我在您的代码中挂接了一个远程会话变量,最终有了可用的东西:$s = New-PSSession -ComputerName "WTxxxxxL32" -Credential $credentialInvoke-Command -Session $s -Command {D:\ServerDLLDev\RemoteCOMInstall.ps1} - JustJohn
3个回答

16

当你写下以下代码:

invoke-command -computer $MachineName -filepath "C:\hello.ps1"

脚本C:\hello.ps1将从客户端计算机获取并传输到服务器上执行。因此,您会收到错误消息文件不存在,因为Invoke-Command在客户端计算机上查找该文件。


远程脚本如何传递参数? - j.a.estevan
3
请看 -ArgumentList - JPBlanc
@JPBlanc,我在使用“-ArgumentList”选项执行指定远程机器上的远程文件时遇到了困难。 - Honinbo Shusaku
你遇到了哪些困难?你的脚本使用$argv传递参数,而你在-ArgumentList中给出了值。 - JPBlanc
我如何在服务器上使用文件路径?-filepath "server:C:\hellp.ps1"?我不想挂载驱动器。非常感谢! - FelixH

1

我遇到了同样的错误,但是我在你的代码中将远程会话挂钩到一个变量中,最终得到了可行的解决方法:

$s = New-PSSession -ComputerName "WTxxxxxL32" -Credential $credential

Invoke-Command -Session $s -Command {D:\ServerDLLDev\RemoteCOMInstall.ps1}

有许多Invoke-etc的解决方案,但最简单的最终对我有用。感谢你。

这意味着您正在从本地计算机在虚拟机上运行 PowerShell 命令吗? - ChanGan
没有虚拟机参与。客户端计算机和服务器。New-PSSession创建一个会话,在远程服务器上运行代码。然后,Invoke-Command用于该会话,运行驻留在服务器上的脚本。之前我将代码放在客户端,但是那样会导致错误。 - JustJohn
我的服务器机器在另一个域上。这个解决方案可行吗? - ChanGan
我的服务器在另一个域上。试一下。会话基于计算机名称,就像SSMS连接一样(不要引用我)。本质上,您用于从客户端连接RDP的凭据与相同。您会注意到我引用“$credential”,因为我将用户名/密码加载到其中,因为我多次使用它。尝试使用硬编码的用户名/密码。 - JustJohn

-2

没问题,只需要改变顺序

invoke-command -computer $MachineName -filepath "C:\hello.ps1"

改为

invoke-command -filepath "C:\hello.ps1" -computer $MachineName


这怎么解决问题了呢?命名参数的顺序不会改变它们的评估方式或者 cmdlet 的执行方式。 - Lance U. Matthews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接