PowerShell执行Copy-Item远程拷贝文件时凭据报错问题
问题根因
两个核心错误导致复制失败:
New-PSDrive的执行位置错了:你把创建PSDrive的逻辑放在Invoke-Command的远程脚本块里,这个X盘只存在于consolidate主机的远程PowerShell会话中,本地会话完全无法访问,会话销毁后驱动器也会自动删除。后续本地执行Copy-Item访问\\consolidate\c$走的是本地当前用户的身份认证,没有用到你定义的凭证,自然触发用户名密码错误。- PowerShell FileSystem provider原生不支持
Copy-Item直接传入-Credential参数,该参数仅对New-PSDrivecmdlet生效,直接给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
相关产品推荐
相关产品推荐

