You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Invoke-Command执行远程服务器上的PowerShell脚本?

解决Invoke-Command执行远程机器上已有脚本的问题

这个问题我之前帮不少开发者解决过,核心是对Invoke-Command的参数作用理解有点偏差——-FilePath参数的设计初衷是把本地的脚本文件复制到远程机器后执行,所以它默认会去你的本地文件系统查找指定路径。要执行远程机器上已经存在的脚本,我们需要换用-ScriptBlock参数来直接调用远程路径的脚本,具体有几种实用方式:

直接在脚本块中指定远程脚本路径

如果已经明确知道远程机器上的脚本绝对路径,直接在-ScriptBlock里用调用操作符&执行即可:

Invoke-Command -ComputerName XXXX -ScriptBlock { & "C:\Remote\Path\To\Your\Script.ps1" }

通过参数传递远程脚本路径(兼容低版本PowerShell)

要是你的脚本路径存放在本地变量里,或者路径包含空格/特殊字符,可以用-ArgumentList把路径传递给远程脚本块:

# 本地定义远程脚本路径
$remoteScript = "D:\Scripts\My Script With Spaces.ps1"
# 传递参数并执行
Invoke-Command -ComputerName XXXX -ScriptBlock { & $args[0] } -ArgumentList $remoteScript

使用$using:变量(PowerShell 3.0及以上版本)

从PowerShell 3.0开始,支持用$using:前缀直接引用本地变量,写法更简洁直观:

$remoteScriptPath = "C:\AdminTools\DeployScript.ps1"
Invoke-Command -ComputerName XXXX -ScriptBlock { & $using:remoteScriptPath }

额外注意事项

  • 确保远程机器的PowerShell执行策略允许运行脚本(可在远程端用Set-ExecutionPolicy调整,或执行时加-ExecutionPolicy Bypass参数临时绕过)
  • 你的账户需要拥有远程机器上执行该脚本的权限,且WinRM服务已正确配置
  • 如果脚本需要传入参数,同样可以通过-ArgumentList或者$using:传递给远程脚本

内容的提问来源于stack exchange,提问作者bpeikes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:27:45