«

Windows 提示“找不到网络路径” 0x80070035:先分清是“到不了”还是“进不去”

tenai 发布于 阅读:700 报错速查


同一个 0x80070035「找不到网络路径」,背后至少有五种完全不同的原因:名称解析、445 端口、网络发现、来宾登录、SMB1。所以别猜 —— 这个错最费时间的地方不是修,是一开始就修错了方向。

最后更新 2026-10-20 适用 Windows 7 – Windows 11 脚本验证 PowerShell 5.1(纯只读)

一、30 秒判断:这是不是你的问题

三条全部命中,才是本文说的问题
  1. 访问 \\服务器\共享名 或映射网络驱动器时报「Windows 无法访问 \\… 找不到网络路径」,错误代码 0x80070035。
  2. 把主机名换成 IP 后能访问 → 名字解析问题;换成 IP 也不能访问 → 继续查端口。
  3. 同一个共享,同事能进你进不去 → 问题在你这台机器,不在服务器。

如果提示的是「拒绝访问」或报 0x80070005,那不是这个问题 —— 那是权限问题,改网络设置一万遍也没用。如果报 0x80004005,看文末。

二、适用环境

项目 说明
客户端 Windows 7 / 10 / 11 全版本
对端 Windows 文件服务器、群晖/威联通等 NAS、老版本 Samba
网络环境 域环境、工作组都会出现
典型场景 新装电脑访问老服务器、笔记本换网络后访问公司共享、家里访问 NAS
不适用 能打开共享但提示无权限(那是 0x80070005)

三、为什么会这样:五种成因,一个报错

成因 典型特征 怎么确认
名称解析失败 用 IP 能访问,用主机名不行 ping 主机名 失败但 ping IP 通
445 端口不通 ping 通,但共享打不开 Test-NetConnection 主机 -Port 445 为 False
网络配置文件是"公用" 看不到别人的电脑,别人也看不到你 设置 → 网络 → 当前网络为「公用」
来宾登录被禁止 NAS 场景最常见,账号为空或匿名 Get-SmbClientConfiguration 看来宾登录项
SMB1 已禁用 对端是 Win7 / 老 NAS / 老 Samba 查 SMB1Protocol 功能状态

一句话:0x80070035 的含义是"我根本走不到那条路",不是"我进不去"。

所以改共享权限、加域账号、重设 NTFS 权限,全都解决不了它 —— 那些是 0x80070005 的方向。

四、方案 A:五步定位(顺序不能乱)

这五步的意义在于逐层排除:先分清"名字问题"还是"网络问题",否则你会一直在改错的东西。比如明明是 DNS 没解析,却去开了半天防火墙。

# 第 1 步:名称解析 —— 主机名和 IP 分别 ping 一次
ping fileserver
ping 10.0.1.10

# 第 2 步:SMB 端口 —— ping 通不代表 445 通
Test-NetConnection fileserver -Port 445

# 第 3 步:实际访问 —— 直接测路径,比看界面准
Test-Path "\\fileserver\public"

# 第 4 步:客户端配置 —— 来宾登录、签名要求
Get-SmbClientConfiguration | Select-Object EnableInsecureGuestLogons, RequireSecuritySignature

# 第 5 步:相关服务 —— 任何一个没起来都会导致这个报错
Get-Service LanmanWorkstation, Tcpip, NetBT, Dnscache

这五步跑完,基本能锁定是哪一层。不要跳过第 1 步直接去改防火墙 —— 那是最常见的浪费。

五、方案 B:按定位结果分别修

定位结果 修法
ping 主机名失败、ping IP 通 改 DNS 记录,或本机 hosts 加一条;临时方案是直接用 IP 映射驱动器(但要给打印机/服务器做 DHCP 保留)
445 不通 服务端防火墙放行「文件和打印机共享 (SMB-In)」;确认没被第三方安全软件拦;中间的 ACL / 安全组也要查
网络是「公用」 改成「专用」,否则文件和打印机共享规则不生效
对端是 NAS、账号为空或匿名 开启来宾登录(见下方命令),或用 NAS 上建的真实账号登录
对端是 Win7 / 老 Samba 优先升级设备;实在不行才在隔离网段启用 SMB1

来宾登录(仅 NAS / 匿名共享场景)

# 开启来宾登录(需要管理员权限)
New-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters' `
  -Name AllowInsecureGuestAuth -PropertyType DWord -Value 1 -Force

# 回滚
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters' `
  -Name AllowInsecureGuestAuth -Value 0
这是降安全,不是修好

来宾登录意味着允许不带凭据访问共享,等于把 SMB 的认证要求关掉。只在可信内网、且对方确实无法提供账号时使用。正确做法是在 NAS 上建一个专用账号,用账号访问。

六、方案 C:三件不要做的事

  • 不要为了连通就开 SMB1。SMB1 是 WannaCry 和一堆勒索病毒的入口,微软默认关闭是有原因的。真要为老设备开,限定在隔离网段、加白名单,并且记在资产台账上。
  • 不要关防火墙了事。关掉防火墙能通,说明规则没配对,该补规则而不是拆墙。
  • 不要用"重启试试"掩盖问题。重启后能用、过几天又坏,说明是 IP 变了、DHCP 租约到期、或凭据缓存过期,根因还在。

七、一键巡诊脚本

把上面五步做成一个纯只读脚本:不修改注册表、不动服务、不碰防火墙,只输出判断结果。适合现场排障时先跑一遍,也适合写进交接文档。

# 诊断具体共享
.\Test-SmbAccess80070035.ps1 -Target "\\fileserver\public"

# 只知道服务器名/IP 时
.\Test-SmbAccess80070035.ps1 -Server 10.0.1.10
展开完整脚本(保存为 Test-SmbAccess80070035.ps1 后使用)
#Requires -Version 5.1
<#
.SYNOPSIS
    Windows 0x80070035「找不到网络路径」五步巡诊工具(纯只读)

.DESCRIPTION
    0x80070035 至少有五种完全不同的成因,报的是同一个错。本脚本按固定顺序逐层排除,
    最后给出结论和下一步动作,不做任何修改。

    检查顺序(不要打乱,后一步的结论依赖前一步):
      1. 名称解析   主机名能不能解析成 IP —— 区分"名字问题"和"网络问题"
      2. 445 端口   能不能连到 SMB 端口 —— 区分"网络不通"和"服务不可达"
      3. 共享可达   直接访问目标路径 —— 区分"能连"和"能读"
      4. 客户端配置 来宾登录、签名要求、SMB1 状态
      5. 相关服务   工作站服务、NetBIOS 名称服务

.PARAMETER Target
    要访问的共享路径,例如 \\fileserver\share 或 \\10.0.1.10\share。

.PARAMETER Server
    只给服务器名或 IP 时使用,脚本自动补 \\ 前缀。

.EXAMPLE
    .\Test-SmbAccess80070035.ps1 -Target "\\fileserver\public"

.EXAMPLE
    .\Test-SmbAccess80070035.ps1 -Server 10.0.1.10

.NOTES
    最后更新:2026-10-20
    本脚本只读:不修改注册表、不改服务、不改防火墙。
#>

[CmdletBinding()]
param(
    [string]$Target,
    [string]$Server
)

Set-StrictMode -Version Latest
$ErrorActionPreference = 'Continue'

if ([string]::IsNullOrWhiteSpace($Target) -and [string]::IsNullOrWhiteSpace($Server)) {
    throw '请指定 -Target "\\\\服务器\\共享名" 或 -Server "服务器名/IP"。'
}

if ([string]::IsNullOrWhiteSpace($Target)) {
    $Target = '\\' + ($Server -replace '^\\\\', '')
}

$hostPart = ($Target -replace '^\\\\', '') -split '\\' | Select-Object -First 1
$conclusion = New-Object System.Collections.ArrayList

function Write-Head([string]$text) {
    Write-Host ''
    Write-Host $text -ForegroundColor Yellow
    Write-Host ('-' * 40) -ForegroundColor DarkGray
}

function Test-TcpPort {
    param([string]$ComputerName, [int]$Port, [int]$TimeoutMs = 3000)
    $client = New-Object System.Net.Sockets.TcpClient
    try {
        $async = $client.BeginConnect($ComputerName, $Port, $null, $null)
        if (-not $async.AsyncWaitHandle.WaitOne($TimeoutMs)) { return $false }
        $client.EndConnect($async)
        return $true
    }
    catch {
        return $false
    }
    finally {
        $client.Close()
    }
}

Write-Host ''
Write-Host '0x80070035 网络路径排障巡诊(只读)' -ForegroundColor Cyan
Write-Host ("目标:{0}" -f $Target) -ForegroundColor Cyan
Write-Host ("服务器名/IP:{0}" -f $hostPart) -ForegroundColor Cyan

# ---------------------------------------------------------------- 1 名称解析
Write-Head '[1/5] 名称解析'

$resolved = $null
try {
    $addrs = [System.Net.Dns]::GetHostAddresses($hostPart)
    $ipList = @($addrs | ForEach-Object { $_.IPAddressToString })
    $resolved = $ipList
    Write-Host ("   -> 解析到:{0}" -f ($ipList -join ', ')) -ForegroundColor Green
}
catch {
    Write-Host '   -> 解析失败' -ForegroundColor Red
    Write-Host ("      原因:{0}" -f $_.Exception.Message) -ForegroundColor DarkGray
    [void]$conclusion.Add('名称解析失败:这是最可疑的一层。用 IP 直连测试,若 IP 能通,改 DNS 记录或本机 hosts。')
}

$isIpLiteral = $false
if ($hostPart -match '^\d{1,3}(\.\d{1,3}){3}$') { $isIpLiteral = $true }

if ($isIpLiteral) {
    Write-Host '   (目标本来就是 IP,跳过名称解析判断)' -ForegroundColor Gray
}
elseif ($null -ne $resolved) {
    Write-Host '   -> 主机名能解析,说明不是纯 DNS 问题;继续查端口' -ForegroundColor Gray
}

# ---------------------------------------------------------------- 2 445 端口
Write-Head '[2/5] SMB 端口 445'

$icmp = Test-Connection -ComputerName $hostPart -Count 2 -Quiet -ErrorAction SilentlyContinue
Write-Host ("   ICMP(ping):{0}" -f $(if ($icmp) { '通' } else { '不通(部分服务器禁 ping,不代表不可用)' })) -ForegroundColor $(if ($icmp) { 'Green' } else { 'Gray' })

$p445 = Test-TcpPort -ComputerName $hostPart -Port 445 -TimeoutMs 3000
if ($p445) {
    Write-Host '   TCP 445:通' -ForegroundColor Green
}
else {
    Write-Host '   TCP 445:不通' -ForegroundColor Red
    [void]$conclusion.Add('445 端口不可达:检查服务端防火墙(文件和打印机共享-SMB-In)、安全软件、以及中间的 ACL;445 被封时必然报 0x80070035。')
}

# 顺带看 139,判断是不是老 SMB1 走 NetBIOS
$p139 = Test-TcpPort -ComputerName $hostPart -Port 139 -TimeoutMs 2000
Write-Host ("   TCP 139:{0}" -f $(if ($p139) { '通' } else { '不通' })) -ForegroundColor Gray

if ($p445 -and -not $icmp) {
    Write-Host '   注意:ping 不通但 445 通,属于正常的"禁 ICMP"配置,不要去开防火墙回显。' -ForegroundColor DarkGray
}

# ---------------------------------------------------------------- 3 共享可达
Write-Head '[3/5] 共享路径可达性'

$hasShare = ((($Target -replace '^\\\\', '') -split '\\').Count -gt 1)

if ($p445 -and -not $hasShare) {
    Write-Host '   -> 目标只给了服务器名,没有共享名,跳过可达性测试' -ForegroundColor Gray
    Write-Host '      要测具体共享,请用 -Target "\\服务器\共享名"' -ForegroundColor DarkGray
    [void]$conclusion.Add('445 可达但未指定共享名:请补上共享名再跑一次,才能判断是"连不上"还是"进不去"。')
}
elseif ($p445) {
    $reachable = Test-Path -LiteralPath $Target -ErrorAction SilentlyContinue
    if ($reachable) {
        Write-Host '   -> 路径可访问。若客户端界面仍报 0x80070035,多半是缓存凭据或资源管理器进程问题。' -ForegroundColor Green
        Write-Host '      尝试:net use * /delete /y 后重新映射,或注销重登。' -ForegroundColor DarkGray
        [void]$conclusion.Add('路径实际可访问:问题更可能在资源管理器缓存、已断开的映射驱动器或凭据缓存,而不是网络。')
    }
    else {
        Write-Host '   -> 路径不可访问(可能是共享名不存在、无权限,或需要凭据)' -ForegroundColor Yellow
        Write-Host '      注意:无权限通常报 0x80070005,报 0x80070035 更像"到不了"而不是"进不去"。' -ForegroundColor DarkGray
    }
}
else {
    Write-Host '   -> 445 不通,跳过本步' -ForegroundColor Gray
}

# ---------------------------------------------------------------- 4 客户端配置
Write-Head '[4/5] SMB 客户端配置'

try {
    $cfg = Get-SmbClientConfiguration -ErrorAction Stop

    $guest = $null
    if ($cfg.PSObject.Properties.Name -contains 'EnableInsecureGuestLogons') {
        $guest = $cfg.EnableInsecureGuestLogons
    }
    if ($null -ne $guest) {
        $guestText = if ($guest) { '允许(可访问来宾共享)' } else { '禁止(默认值,访问 NAS 来宾共享会失败)' }
        Write-Host ("   来宾登录:{0}" -f $guestText) -ForegroundColor $(if ($guest) { 'Green' } else { 'Yellow' })
        if (-not $guest) {
            Write-Host '      若是群晖/威联通等 NAS 且账号为空密码或匿名,这一项就是原因。' -ForegroundColor DarkGray
            [void]$conclusion.Add('来宾登录被禁止:访问 NAS 匿名共享会失败。如确属可信内网,可开启 AllowInsecureGuestAuth,但要清楚这是降安全。')
        }
    }

    if ($cfg.PSObject.Properties.Name -contains 'RequireSecuritySignature') {
        Write-Host ("   要求 SMB 签名:{0}" -f $cfg.RequireSecuritySignature) -ForegroundColor Gray
    }
    Write-Host ("   启用多通道:{0}" -f $cfg.EnableMultiChannel) -ForegroundColor DarkGray
}
catch {
    Write-Host '   读取 SMB 客户端配置失败(需要管理员权限)' -ForegroundColor Red
    Write-Host ("   原因:{0}" -f $_.Exception.Message) -ForegroundColor DarkGray
}

# SMB1 状态
try {
    $f = Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -ErrorAction Stop
    Write-Host ("   SMB1 客户端:{0}" -f $f.State) -ForegroundColor $(if ($f.State -eq 'Enabled') { 'Yellow' } else { 'Gray' })
    if ($f.State -ne 'Enabled') {
        Write-Host '      若对端是老 NAS / 老服务器且只支持 SMB1,这就是原因。' -ForegroundColor DarkGray
        Write-Host '      但不要无脑开启:SMB1 是 WannaCry 的入口,只在隔离网段、确有老设备时开。' -ForegroundColor DarkGray
    }
}
catch {
    Write-Host '   SMB1 状态:读取失败(需要管理员权限)' -ForegroundColor DarkGray
}

# ---------------------------------------------------------------- 5 相关服务
Write-Head '[5/5] 相关服务'

$svcList = @('LanmanWorkstation', 'Tcpip', 'NetBT', 'Dnscache')
foreach ($name in $svcList) {
    $svc = Get-Service -Name $name -ErrorAction SilentlyContinue
    if ($null -eq $svc) {
        Write-Host ("   {0}:不存在" -f $name) -ForegroundColor Gray
        continue
    }
    $color = if ($svc.Status -eq 'Running') { 'Green' } else { 'Red' }
    Write-Host ("   {0}:{1}  启动类型:{2}" -f $svc.Name, $svc.Status, $svc.StartType) -ForegroundColor $color
    if ($name -eq 'LanmanWorkstation' -and $svc.Status -ne 'Running') {
        [void]$conclusion.Add('工作站服务 (LanmanWorkstation) 未运行:这是 SMB 客户端的核心服务,必须启动。')
    }
}

# ---------------------------------------------------------------- 结论
Write-Head '结论'

if ($conclusion.Count -eq 0) {
    Write-Host '   本次巡诊没有命中已知成因。' -ForegroundColor Yellow
    Write-Host '   下一步建议:' -ForegroundColor Yellow
    Write-Host '     1) 用 IP 替换主机名再访问一次,确认是否纯名称问题'
    Write-Host '     2) 换一台机器访问同一路径,确认是服务端还是本机问题'
    Write-Host '     3) 临时退出第三方安全软件(360 / 火绒 / 趋势等)再试一次'
}

$i = 0
foreach ($c in $conclusion) {
    $i++
    Write-Host ("   {0}. {1}" -f $i, $c) -ForegroundColor Cyan
}

Write-Host ''
Write-Host '   提醒:0x80070035 与 0x80070005(拒绝访问)、0x80004005(未指定错误)成因不同,不要混着改。' -ForegroundColor DarkGray
Write-Host '   本脚本只读,未修改任何配置。' -ForegroundColor DarkGray
Write-Host ''

八、怎么确认真的修好了

  1. Test-Path "\\fileserver\public" 返回 True
  2. 资源管理器里能打开并读写一个测试文件(能打开不等于有写权限)
  3. 映射的驱动器能正常重连:net use Z: "\\fileserver\public" /persistent:yes
  4. 重启一次再验一遍。映射驱动器和凭据缓存经常"当场好、重启坏"

九、踩过的坑

  1. 拿 ping 结果当结论。很多服务器禁 ICMP,ping 不通但 445 完全正常。反过来 ping 通也可能 445 被封。
  2. 把 0x80070035 和 0x80070005 混着修。前者是"到不了",后者是"进不去"。加权限解决不了前者,这是最常见的白干。
  3. 断开的映射驱动器还挂着。资源管理器里显示个红叉,双击就报 0x80070035。先 net use * /delete /y 全部清掉再重映射。
  4. NAS 场景先怀疑网络。实际上八成是来宾登录被禁,先查配置比查交换机快得多。
  5. 网络配置文件是"公用"。这时候防火墙的文件共享规则不生效,怎么放行都没用,先把网络改成「专用」。
  6. 开了 SMB1 忘记关。临时救急之后没人回收,一年后做安全检查才发现。开的时候就在台账上记一笔。

十、不是这个问题的情况

  • 0x80070005 —— 拒绝访问,共享权限或 NTFS 权限问题,跟网络无关
  • 0x80004005 —— 未指定的错误,映射驱动器场景常见,成因比本条更杂
  • 0x0000011b —— 打印机共享连不上,RPC 认证级别问题
  • 0x00000709 —— 无法设置默认打印机,注册表残留记录问题

关于本文示例:文中主机名、IP、共享名均为示例(fileserver、10.0.1.10、public),请替换成你自己的环境。写这类文章最容易犯的错,就是把真实内网信息截图带出来。

巡诊脚本是只读的,不会改任何配置。改动类操作(开来宾登录、启用 SMB1)请自行评估后手动执行。

共享 打印机 WIN 报错