You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过脚本自动化扫描局域网共享并重新连接断开的共享驱动器?

如何通过脚本自动化扫描局域网共享并重新连接断开的共享驱动器?

完全懂你这种反复手动重连共享驱动器的痛苦!我之前也被这个问题折腾过,后来写了几个脚本解决,给你分享几个实用的方案,涵盖Windows环境下的PowerShell和批处理脚本,按需选择:

方案一:PowerShell脚本(功能更全面)

这个脚本不仅能重新连接已断开的映射驱动器,还可以扫描局域网内的设备,尝试连接你预设的共享路径。把下面的代码保存为ReconnectShares.ps1,记得根据你的实际情况修改共享路径和网段:

# 获取所有状态异常的网络驱动器(DriveType=4代表网络驱动器)
$disconnectedDrives = Get-WmiObject Win32_LogicalDisk -Filter "DriveType=4 AND ProviderName IS NOT NULL" | Where-Object { $_.Status -ne "OK" }

# 替换成你常用的共享路径,比如公司服务器、NAS的共享
$sharedPaths = @("\\ServerName\TeamDocs", "\\192.168.3.20\Backup", "\\HomeNAS\Media")

# 先处理已断开的现有映射驱动器
foreach ($drive in $disconnectedDrives) {
    $targetShare = $drive.ProviderName
    if ($sharedPaths -contains $targetShare) {
        Write-Host "正在重新连接: $targetShare (驱动器号: $($drive.DeviceName))"
        # 执行重连,/persistent:yes让驱动器在重启后保持映射
        net use $drive.DeviceName $targetShare /persistent:yes
    }
}

# 可选功能:扫描局域网内的在线设备,尝试连接预设共享
# 替换成你的局域网网段,比如192.168.3.*
$subnetPrefix = "192.168.3."
for ($i=1; $i -le 254; $i++) {
    $currentIP = $subnetPrefix + $i
    # 快速ping检测设备是否在线
    if (Test-Connection -ComputerName $currentIP -Count 1 -Quiet -TimeoutSeconds 1) {
        Write-Host `n"发现在线设备: $currentIP"
        try {
            # 获取该设备的共享列表(跳过系统默认的管理共享)
            $deviceShares = Get-WmiObject -Class Win32_Share -ComputerName $currentIP -ErrorAction Stop | Where-Object { $_.Name -notin @("ADMIN$", "C$", "IPC$") }
            foreach ($share in $deviceShares) {
                $fullSharePath = "\\$currentIP\$($share.Name)"
                if ($sharedPaths -contains $fullSharePath) {
                    # 检查该共享是否已映射,未映射则自动连接
                    if (-not (Get-WmiObject Win32_LogicalDisk -Filter "ProviderName='$fullSharePath'")) {
                        Write-Host "映射新共享: $fullSharePath"
                        net use * $fullSharePath /persistent:yes
                    }
                }
            }
        } catch {
            Write-Host "无法访问$currentIP的共享资源(可能权限不足或设备未开启共享): $_"
        }
    }
}

使用说明:

  1. 右键以管理员身份运行PowerShell,然后执行. .\ReconnectShares.ps1(注意第一个点后面有空格)。
  2. 如果共享需要验证身份,建议提前在Windows「凭据管理器」里保存对应的用户名和密码,这样脚本就能自动使用凭证,不用明文写密码。

方案二:批处理脚本(轻量简洁)

如果你觉得PowerShell太复杂,这个批处理脚本更简单直接,适合快速执行:

@echo off
setlocal enabledelayedexpansion

:: 替换成你的共享路径,用空格分隔
set "SHARE_LIST=\\ServerName\TeamDocs \\192.168.3.20\Backup \\HomeNAS\Media"

:: 遍历共享列表,检查并重新连接
for %%s in (%SHARE_LIST%) do (
    :: 检查该共享是否已映射
    net use | findstr /i "%%s" >nul
    if errorlevel 1 (
        echo [INFO] 正在重新连接共享: %%s
        net use * "%%s" /persistent:yes
    ) else (
        echo [INFO] 共享%%s已经处于连接状态
    )
)

:: 可选:简单扫描局域网在线设备
set "SUBNET=192.168.3."
echo.
echo [INFO] 正在扫描局域网设备...
for /l %%i in (1,1,254) do (
    ping -n 1 -w 100 !SUBNET!%%i >nul
    if not errorlevel 1 (
        echo [FOUND] 在线设备: !SUBNET!%%i
    )
)

pause

使用说明:

  1. 把代码保存为ReconnectShares.bat,右键以管理员身份运行即可。
  2. 同样,提前在凭据管理器保存共享的账号密码,避免每次运行都弹窗输入。

额外优化:定时自动执行

为了彻底解放双手,可以用Windows「任务计划程序」设置脚本定时运行:

  1. 打开「任务计划程序」,创建基本任务。
  2. 设置触发条件(比如每天固定时间、或者当网络连接到你的局域网时)。
  3. 操作选择「启动程序」,选择你的脚本文件(PowerShell脚本需要设置程序为powershell.exe,参数填-ExecutionPolicy Bypass -File "C:\路径\ReconnectShares.ps1")。
  4. 勾选「使用最高权限运行」,确保脚本有足够权限。

备注:内容来源于stack exchange,提问作者Katto Ishimura

火山引擎 最新活动