局域网内通过PowerShell向多台电脑复制文件的脚本故障排查求助
脚本问题排查与修正
原脚本的核心问题
- 变量未解析+路径格式错误:单引号包裹的路径
'\$computer\c$\temp\'里,$computer不会被替换成实际电脑名,且UNC网络路径必须以\\开头,否则系统无法识别为共享路径。 - 作用域错误:
$computers是本地定义的变量,远程执行的脚本块默认无法直接访问,需用$using:前缀引用,但这里根本不需要在远程脚本块内重复循环目标电脑列表。 - 逻辑倒置:你的需求是从一台电脑复制文件到多台,但原脚本是让每台远程电脑(pc1-pc4)将自身文件复制到pc5,完全与需求方向相反;且
Invoke-Command本身已会遍历每台目标电脑,无需在脚本块内再嵌套循环。
修正后的脚本(按需求:从单台电脑复制到多台)
如果你的需求是把pc5上的C:\temp目录内容,复制到pc1、pc2、pc3、pc4的C:\temp目录,可使用以下脚本:
$targetComputers = 'pc1','pc2','pc3','pc4' Invoke-Command -ComputerName $targetComputers -ScriptBlock { # 远程电脑执行:从pc5的共享目录拉取文件到本地 Copy-Item -Path '\\pc5\c$\temp\' -Destination 'C:\temp\' -Recurse -Force }
如果是把本地电脑的文件复制到多台远程电脑,则修改为:
$targetComputers = 'pc1','pc2','pc3','pc4' $localSourcePath = 'C:\temp\' Invoke-Command -ComputerName $targetComputers -ScriptBlock { Copy-Item -Path $using:localSourcePath -Destination 'C:\temp\' -Recurse -Force }
额外注意事项
- 执行脚本的账号需在所有目标电脑上拥有管理员权限(访问
C$默认共享需管理员权限)。 - 所有电脑需开启SMB服务,且防火墙允许文件共享相关通信。
- 若需要覆盖目标目录现有文件,必须添加
-Force参数。
内容的提问来源于stack exchange,提问作者Nick S
相关产品推荐
相关产品推荐

