已远程登录srv1,用robocopy从cl1复制文件到srv1的路径区分方法
路径混淆的根因
PowerShell 远程会话连通后,所有不带机器标识的裸路径(即直接写C:\xxx的格式),永远指向当前会话所在机器的本地文件系统。你现在已经进入srv1的远程会话,命令行上下文属于srv1,这时候敲出来的所有C:\xxx默认都是srv1的本地路径,自然没法和cl1上同盘符的路径做区分。
可直接落地的操作方案
方案1:退出远程会话,用UNC路径跑robocopy
这是最贴近你原本使用习惯的实现方式:
- 在当前srv1的远程会话里输
Exit-PSSession,切回cl1的本地PowerShell环境 - 执行robocopy时,给srv1的目标路径加上UNC机器前缀,cl1的源路径直接写本地路径就行。举个实际例子:
要把cl1上C:\src\work_files的全部内容,复制到srv1的C:\dst\backup目录,完整命令为:robocopy C:\src\work_files \\<srv1_IP>\C$\dst\backup /E - 这里用的是Windows默认开启的C$管理员共享,因为你之前已经用$cred完成了两台实例的认证,只要cl1的当前账号对srv1的C$共享有访问权限,不需要重复输密码。
方案2:不中断当前srv1的远程会话,反向标识cl1的源路径
如果你不想退出当前在srv1上的操作,根本不需要切回cl1,只需要把原计划写cl1本地路径的位置,换成指向cl1的UNC路径即可:
- 还是上面的示例场景,在srv1的远程会话里执行的命令为:
robocopy \\<cl1_IP>\C$\src\work_files C:\dst\backup /E - 路径归属完全清晰:带
\\cl1_IP前缀的是cl1上的源路径,裸写C:\开头的是当前srv1的目标路径,不存在混淆可能。
方案3:用PowerShell原生跨会话复制,彻底避开路径归属问题
如果不需要用到robocopy的断点续传、ACL权限保留、长路径支持等高级特性,可以用PowerShell内置的会话绑定复制能力,完全不依赖UNC共享配置:
- 建立到srv1的远程会话时,把会话对象存在本地变量里,比如:
$sess = New-PSSession -ComputerName <srv1_IP> -Credential $cred - 后续复制操作通过会话对象绑定路径归属,根本不需要写UNC路径:
从cl1往srv1复制:Copy-Item -Path C:\src\work_files -Destination C:\dst\backup -ToSession $sess -Recurse
从srv1往cl1复制:Copy-Item -Path C:\dst\backup -Destination C:\src\work_files -FromSession $sess -Recurse
注意事项
- 走C$这类默认管理员共享的前提,是两台实例的防火墙放行“文件和打印机共享”规则,sky-high平台的已互联实例默认已经开通该规则,不需要额外调整。
- 如果不想用管理员共享,可以在cl1上把需要复制的源文件夹手动设置为共享,给当前使用的账号配好读写权限,之后把路径替换成
\\<cl1_IP>\<自定义共享名>\子路径即可,效果和C$共享完全一致。
内容的提问来源于stack exchange,提问作者HermanHG
相关产品推荐
相关产品推荐

