使用PowerShell向远程计算机传输文件遇错求助
解决PowerShell远程文件传输的New-PSDrive错误问题
首先,我们来逐一拆解你遇到的两个错误,然后给出更简洁的解决方案:
第一个错误:「该提供程序不支持使用凭据」的原因
你脚本里的$using:getcred是问题核心——$using:语法仅用于PowerShell远程会话(比如Invoke-Command)中引用本地变量,在本地运行的脚本里直接用$getcred就可以了。
当你错误地使用$using:getcred时,PowerShell无法正确解析凭据对象,进而抛出了“不支持凭据”的错误,这并不是FileSystem Provider真的不支持凭据参数。
第二个错误:「Drive root不存在」的本质
移除凭据参数后提示路径不存在,大概率不是路径真的不存在,而是当前运行脚本的用户没有访问远程机器uint140的c$共享的权限。默认情况下,c$是管理员共享,需要远程机器的管理员权限才能访问,普通用户无权查看。
另外也需要先确认几个前提:
- 远程机器
uint140处于开机状态且网络可达 - 远程机器的SMB服务(Server服务)已启动
- 远程机器的
c$共享未被组策略或其他方式禁用
修正后的New-PSDrive用法
如果坚持要映射驱动器,可以把脚本改成这样:
# 设置文件路径 $file = "c:\Powershell\testfile.txt" # 获取凭据(注意这里直接用$getcred,不需要$using:) $getcred = Get-Credential 'user' # 映射远程驱动器 New-PSDrive -Name Oli -PSProvider FileSystem -Root \\uint140\c$ -Credential $getcred # 复制文件到映射的驱动器根目录 Copy-Item -Path $file -Destination Oli:\ # 用完后可以移除驱动器(可选) Remove-PSDrive Oli
更高效的替代方案:直接用Copy-Item
其实完全不需要映射驱动器,Copy-Item本身就支持-Credential参数,一步到位更简洁:
$file = "c:\Powershell\testfile.txt" $getcred = Get-Credential 'user' # 直接复制文件到远程共享 Copy-Item -Path $file -Destination \\uint140\c$ -Credential $getcred
如果后续要扩展到多用户/多机器场景,你可以把目标机器名放到一个列表里,用foreach循环遍历执行复制操作即可。
内容的提问来源于stack exchange,提问作者Jfegan91
相关产品推荐
相关产品推荐

