【问题标题】:How to execute a powershell script available in remote machine?如何执行远程机器上可用的powershell脚本?
【发布时间】:2012-05-13 17:45:08
【问题描述】:

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

我在远程机器上做了“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 }”在远程工作并将结果返回给客户端。看到它在客户端执行的返回值,我误解了。

【问题讨论】:

  • 我爱你。在您的帖子发布 5 年后,经过几天和几天的谷歌搜索和溢出并尝试 Invoke-yadayada 的每个配置,几乎准备放弃,我看到您的“更新:”部分并尝试一下。它给了我同样的错误,但我在你的代码中的一个变量中挂了一个远程会话,最后得到了一些有用的东西: ::::::::: $s = New-PSSession -ComputerName "WTxxxxxL32" -Credential $credential :: ::: Invoke-Command -Session $s -Command {D:\ServerDLLDev\RemoteCOMInstall.ps1}

标签: powershell powershell-2.0 powershell-remoting


【解决方案1】:

当你写的时候:

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

脚本C:\hello.ps1 将从客户端计算机获取并带到服务器执行。所以你得到了错误文件不存在,因为 Invoke-Command 正在客户端计算机中寻找文件。

【讨论】:

  • 给远程脚本参数怎么样?
  • 看看-ArgumentList
  • @JPBlanc 我很难找到如何使用-ArgumentList 选项在指定的远程机器上执行远程文件
  • 哪种困难?您的脚本接受参数(使用 $argv)并在 -ArgumentList 中给出值。
  • 如何在服务器上使用文件路径? -文件路径“服务器:C:\ hellp.ps1”?我不想安装驱动器。非常感谢!
【解决方案2】:

我遇到了同样的错误,但我在您的代码中的一个变量中挂钩了一个远程会话,最终得到了一些有效的东西:

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

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

有一百万个调用等解决方案,但最简单的最终对我有用。谢谢你。

【讨论】:

  • 这意味着您正在从本地计算机上的 VM 上运行 powershell 命令??
  • 不涉及虚拟机。客户端计算机和服务器。 New-PSSession 创建一个会话以在远程服务器上运行代码。会话的 Invoke-Command 然后运行驻留在服务器上的脚本。在我将代码放在客户端之前,但这会产生错误。
  • 我的服务器机器在其他域上。这个解决方案行得通吗??
  • 我的服务器在其他域。试试吧。会话基于计算机名称,就像 SSMS 连接方式一样(不要引用我的话)。本质上,您用于从客户端连接 RDP 的相同凭据是相同的凭据。您注意到我引用“$credential”是因为我将用户名/密码加载到其中,因为我多次使用它。尝试使用硬编码的用户名/密码。
【解决方案3】:

换个顺序就好了

代替

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

使用

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

【讨论】:

  • 这如何解决问题?命名参数的顺序不会改变它们的评估方式或 cmdlet 的执行方式。
猜你喜欢
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多