PowerShell映射网络驱动器:二次运行跳过凭据请求且报错密码错误
问题原因分析
你的问题核心是Windows凭据管理器缓存了错误/过期的凭据,加上Remove-PSDrive仅移除PowerShell层面的驱动器映射,并未彻底断开系统级的SMB连接,导致第二次运行脚本时,系统自动复用缓存的无效凭据,跳过输入步骤直接报错。
Windows 11家庭版和专业版的差异在于:家庭版缺少部分组策略控制项,默认的凭据缓存机制更“顽固”,不会自动清理无效的SMB连接凭据,而专业版在某些场景下会自动失效旧凭据。
修正后的脚本方案
修改脚本,加入彻底断开SMB连接、清除缓存凭据的步骤,确保每次运行都重新获取有效凭据:
# 彻底断开所有到目标服务器的SMB连接(替换为你的服务器名) net use \\host /delete /y 2>$null # 清除凭据管理器中对应服务器的缓存凭据 cmdkey /delete:host 2>$null # 移除PowerShell驱动器映射(兼容旧连接) Remove-PSDrive -Name "P" -ErrorAction SilentlyContinue Remove-PSDrive -Name "T" -ErrorAction SilentlyContinue $User = "DOMAIN\username" $Credential = Get-Credential -UserName $User -Message "Enter password" # 重新映射驱动器 New-PSDrive -Name "P" -PSProvider FileSystem -Root "\\host\Dir_A" -Credential $Credential -Persist New-PSDrive -Name "T" -PSProvider FileSystem -Root "\\host\Dir_B" -Credential $Credential -Persist
关键修改说明
net use \\host /delete /y:直接断开系统级的SMB连接,避免残留的连接会话干扰新映射cmdkey /delete:host:强制删除凭据管理器中存储的该服务器凭据,确保Get-Credential会重新弹出输入框-ErrorAction SilentlyContinue:避免因驱动器未映射时执行Remove-PSDrive报错,让脚本更健壮
额外注意事项
- 如果你的服务器是IP地址,把
host替换为对应的IP(比如\\192.168.1.100和192.168.1.100) - 若仍有问题,可手动打开凭据管理器(控制面板→用户账户→凭据管理器),找到对应服务器的Windows凭据并删除后再测试
内容的提问来源于stack exchange,提问作者Saren Tasciyan
相关产品推荐
相关产品推荐

