New-PSDrive映射网络驱动器报错“网络路径不存在”问题求助
New-PSDrive 报“The network Path was not found”错误修复方案
问题根因
这个报错是典型的SMB会话预认证缺失问题:资源管理器访问目标路径时会自动完成SMB会话建立和身份校验,而直接执行New-PSDrive时,命令在身份认证未完成的情况下就发起路径访问校验,就会抛出路径不存在的错误。另外当前代码还有两个可优化点也会触发该错误:
- UNC路径末尾多余的反斜杠在部分PowerShell版本中会导致路径解析失败
- 不需要持久化盘符的情况下使用
-Persist参数,会提升身份校验的要求,增加失败概率
修复方案
方案1:直接删除不必要的盘符映射(最优)
如果仅需要读取目标路径下的文件,完全不需要映射本地盘符,直接通过带凭据的UNC路径访问即可,修改后的代码如下:
Get-Date -Format "dddd MM/dd/yyyy HH:mm K">> "C:\file\results.txt" $cred = Get-Credential -Credential domain\name $serverlist = @(get-content -Path "C:\file\serverlist.txt") foreach ($s in $serverlist) { $path2 = "\\$s\e$\Updates\file\errors.txt" # 直接通过凭据访问UNC路径,不需要映射盘符 $file = Get-Content $path2 -Credential $cred $containsWord = $file | %{$_ -match "0"} if ($containsWord -contains $true) { Out-File -FilePath "C:\file\results.txt" -Append -InputObject "$s : ok" } else { Out-File -FilePath "C:\file\results.txt" -Append -InputObject "$s : nok" } }
方案2:保留盘符映射逻辑的修复
如果确实需要映射盘符,按以下规则修改代码:
- 删除UNC路径末尾的反斜杠
- 移除不必要的
-Persist参数 - 映射前先完成SMB会话认证
修改后的代码如下:
Get-Date -Format "dddd MM/dd/yyyy HH:mm K">> "C:\file\results.txt" $cred = Get-Credential -Credential domain\name $netCred = $cred.GetNetworkCredential() $serverlist = @(get-content -Path "C:\file\serverlist.txt") foreach ($s in $serverlist) { # 提前建立SMB会话认证 net use \\$s\e$ /user:$($netCred.Domain + "\" + $netCred.UserName) $netCred.Password 2>&1 | Out-Null $path = "\\$s\e$\Updates\file" New-PSDrive -Name "S" -Root $path -PSProvider "FileSystem" -Credential $cred | Out-Null $path2 = "\\$s\e$\Updates\file\errors.txt" $file = Get-Content $path2 $containsWord = $file | %{$_ -match "0"} if ($containsWord -contains $true) { Out-File -FilePath "C:\file\results.txt" -Append -InputObject "$s : ok" } else { Out-File -FilePath "C:\file\results.txt" -Append -InputObject "$s : nok" } Remove-PSDrive -Name "S" -Force # 清理SMB会话 net use \\$s\e$ /delete 2>&1 | Out-Null }
内容的提问来源于stack exchange,提问作者su7
相关产品推荐
相关产品推荐

