解决Windows资源管理器在samba网络驱动器连接不上时的卡死问题
网络驱动器自动检测脚本 · 使用说明
一、解决的问题
当 VM17 中的 Ubuntu 虚拟机未正常启动时,Windows 资源管理器里会残留一个「断开状态」的 Samba 网络驱动器图标。鼠标悬停该图标时,资源管理器 / 任务管理器会卡死。
本脚本配合 Windows 任务计划程序周期性运行,自动维护该网络驱动器:
| 检测到的情况 | 脚本动作 |
|---|---|
| 已连接且可访问 | 不做处理 |
| 服务器可达,但映射缺失或断开 | 用配置的账号密码自动重连 / 重建映射 |
| 服务器不可达(虚拟机未启动) | 删除映射并清除持久化记录,坏图标不再残留 |
二、文件说明
脚本链接:
1 | https://github.com/scnable/tool/tree/main/win10_shell |
| 文件 | 说明 |
|---|---|
check-network-drive.ps1 |
主检测脚本(核心) |
install-task.ps1 |
一次性注册定时任务(每 5 分钟运行一次) |
三、特性说明
兼容性
- 使用
net use输出解析检测映射状态,不依赖Get-SmbMapping(该 cmdlet 在 Windows 家庭版中不可用),兼容 Win10/Win11 所有版本。
瞬断容错
- 服务器探测失败后会重试 3 次(间隔 2 秒),避免因 WiFi 瞬时波动等临时网络问题误删映射。
超时保护
- 所有对网络路径的访问均有超时控制,即使 SMB 服务在探测过程中变为不可达,也不会长时间阻塞。
日志管理
- 日志写入
%TEMP%\netdrive-check.log,单文件超过 5MB 后自动轮转,保留最近 3 份历史日志(.1、.2、.3),防止长期运行撑满磁盘。
错误诊断
- 重连失败时会记录
net use的具体退出码和错误信息,方便排查问题。
四、配置步骤
1. 修改主脚本的配置区
用记事本打开 check-network-drive.ps1,修改文件顶部的配置区:
1 | $Mapping = @{ |
保存时请保持「UTF-8 编码」(记事本默认即可),否则中文注释可能乱码。
2. 手动测试主脚本
打开 PowerShell(普通窗口即可),执行:
1 | cd C:\你存放脚本的目录 |
- 虚拟机开着 → 日志出现
[OK] Z: -> \\... 已连接且可访问 - 虚拟机没开 → 日志出现
[删除] 服务器不可达... 已删除映射 Z:,资源管理器中的坏图标消失 - 瞬时网络波动 → 日志出现
[重试] 第 1/2 次重试服务器探测...,恢复后自动重连 - 虚拟机从关到开 → 日志出现
[重连] 成功:Z: -> \\...
日志文件位置:%TEMP%\netdrive-check.log(即 C:\Users\<用户名>\AppData\Local\Temp\netdrive-check.log)。
3. 注册定时任务
在 PowerShell 中执行(需要以普通用户身份,无需管理员):
1 | powershell -ExecutionPolicy Bypass -File .\install-task.ps1 |
看到「已注册定时任务 NetDriveCheck」即成功。任务将在 1 分钟后首次运行,之后每 5 分钟自动检测一次。
安装脚本会自动检查
check-network-drive.ps1是否存在于同目录,若不存在则报错退出。
五、常见问题
- 修改了配置后没有生效? 重新运行一次主脚本即可;定时任务无需重装,它每次都是重新读脚本。
- 想改检测频率? 编辑
install-task.ps1中-RepetitionInterval (New-TimeSpan -Minutes 5)的数值,然后重新运行安装脚本。 - 如何卸载定时任务? 在 PowerShell 中执行
Unregister-ScheduledTask -TaskName 'NetDriveCheck' -Confirm:$false。 - 密码想更安全? 可改用 Windows 凭据管理器(
cmdkey /add:<IP> /user:<用户名> /pass:<密码>)保存凭据,然后把脚本配置区里Pass留空并删掉重连时的密码参数。 - 任务计划程序里「上次运行结果」为 1? 这是正常的:0 表示连接正常,1 表示服务器不可达并已清理,均为预期结果。
- 日志文件占用太多空间? 脚本已内置轮转机制,超过 5MB 自动归档,最多保留 3 份历史日志,无需手动清理。
- 家庭版 Windows 能用吗? 可以。脚本使用
net use输出解析检测映射状态,不依赖Get-SmbMapping,兼容所有 Windows 10/11 版本。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 scnable!
评论