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

PowerShell执行Copy-Item远程拷贝文件时凭据报错问题

问题根因

两个核心错误导致复制失败:

  1. New-PSDrive的执行位置错了:你把创建PSDrive的逻辑放在Invoke-Command的远程脚本块里,这个X盘只存在于consolidate主机的远程PowerShell会话中,本地会话完全无法访问,会话销毁后驱动器也会自动删除。后续本地执行Copy-Item访问\\consolidate\c$走的是本地当前用户的身份认证,没有用到你定义的凭证,自然触发用户名密码错误。
  2. PowerShell FileSystem provider原生不支持Copy-Item直接传入-Credential参数,该参数仅对New-PSDrive cmdlet生效,直接给Copy-Item加凭证会触发NotSupported异常,和你遇到的第二个报错完全对应。
可行修复方案

方案1:本地映射PSDrive(推荐)

直接在本地PowerShell会话中,用指定凭证映射目标UNC路径为网络驱动器,之后直接对映射盘符执行文件操作即可,不需要额外传参:

$password = ConvertTo-SecureString -AsPlainText -Force -String $vmPwd
$user = "consolidate\$vmUser"
$credentials = New-Object System.Management.Automation.PSCredential $user,$password

# 本地创建临时网络驱动器映射,-Persist:$false 表示不做持久化留存
New-PSDrive -Name "X" -PSProvider FileSystem -Root "\\consolidate\c$" -Credential $credentials

# 直接向映射盘复制文件
Copy-Item -Path $calcEngineJarPath -Destination "X:\"

# 其余业务逻辑...

# 操作完成后删除驱动器映射
Remove-PSDrive -Name X

方案2:提前建立SMB认证缓存

如果不想映射盘符,可以先通过net use命令建立到目标共享的认证缓存,后续访问UNC路径会自动复用认证:

$password = ConvertTo-SecureString -AsPlainText -Force -String $vmPwd
$user = "consolidate\$vmUser"
$credentials = New-Object System.Management.Automation.PSCredential $user,$password
$plainPwd = $credentials.GetNetworkCredential().Password

# 建立SMB认证连接
net use \\consolidate\c$ /user:$user $plainPwd | Out-Null

# 直接复制文件,不需要额外传凭证
Copy-Item -Path $calcEngineJarPath -Destination '\\consolidate\c$'

# 操作完成后清除连接
net use \\consolidate\c$ /delete | Out-Null
前置校验项
  • 目标consolidate主机已开启SMB服务,防火墙放通445端口入站规则
  • 传入的$vmUser账号对目标C盘共享有对应读写权限
  • 本地到目标主机的445端口网络连通正常,无安全策略拦截SMB流量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:54:30