用脚本自动检测并修复网络

wen 实用脚本 2

本文目录导读:

用脚本自动检测并修复网络

  1. Windows 网络自动检测修复脚本
  2. PowerShell 版本(功能更强大)
  3. 使用方法
  4. 脚本功能说明

我来提供一个网络自动检测和修复的脚本,这是一个适用于 Windows 系统的批处理脚本,能够自动检测网络连接问题并尝试修复。

Windows 网络自动检测修复脚本

@echo off网络自动检测与修复工具
color 0A
echo ========================================
echo      网络自动检测与修复工具 v1.0
echo ========================================
echo.
:: 获取当前时间
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%hour:~1,1%
set logfile=network_log_%date:~0,4%%date:~5,2%%date:~8,2%_%hour%%time:~3,2%%time:~6,2%.txt
echo [%date% %time%] 开始网络检测... > %logfile%
:: 检测网络连接
echo 正在检测网络连接...
ping -n 3 8.8.8.8 >nul 2>&1
if %errorlevel% equ 0 (
    echo 网络连接正常!
    echo [%date% %time%] 网络连接正常 >> %logfile%
    goto :check_dns
) else (
    echo [警告] 网络连接异常!
    echo [%date% %time%] 网络连接异常 >> %logfile%
    goto :fix_network
)
:check_dns
echo 正在检测DNS解析...
ping -n 3 www.baidu.com >nul 2>&1
if %errorlevel% equ 0 (
    echo DNS解析正常!
    echo [%date% %time%] DNS解析正常 >> %logfile%
    echo.
    echo 所有检测通过,网络运行正常!
    echo [%date% %time%] 所有检测通过 >> %logfile%
    goto :end
) else (
    echo [警告] DNS解析异常!
    echo [%date% %time%] DNS解析异常 >> %logfile%
    echo 尝试修复DNS配置...
    goto :fix_dns
)
:fix_network
echo.
echo ======== 开始修复网络连接 ========
echo [%date% %time%] 开始修复网络连接 >> %logfile%
:: 1. 释放并更新IP地址
echo [步骤1/5] 释放当前IP地址...
ipconfig /release >> %logfile% 2>&1
timeout /t 2 /nobreak >nul
echo [步骤2/5] 更新IP地址...
ipconfig /renew >> %logfile% 2>&1
timeout /t 3 /nobreak >nul
:: 2. 清空DNS缓存
echo [步骤3/5] 清空DNS缓存...
ipconfig /flushdns >> %logfile% 2>&1
:: 3. 重置Winsock目录
echo [步骤4/5] 重置Winsock...
netsh winsock reset >> %logfile% 2>&1
:: 4. 重置网络适配器
echo [步骤5/5] 重置网络适配器...
netsh int ip reset >> %logfile% 2>&1
echo.
echo [%date% %time%] 修复完成 >> %logfile%
echo 网络修复完成!正在重新检测网络连接...
timeout /t 5 /nobreak >nul
:: 重新检测
ping -n 3 8.8.8.8 >nul 2>&1
if %errorlevel% equ 0 (
    echo ✓ 修复成功!网络连接已恢复。
    echo [%date% %time%] 修复成功 >> %logfile%
    goto :check_dns
) else (
    echo ✗ 修复失败,请检查物理连接或联系网络管理员。
    echo [%date% %time%] 修复失败 >> %logfile%
    goto :end
)
:fix_dns
echo.
echo ======== 修复DNS配置 ========
echo [%date% %time%] 修复DNS配置 >> %logfile%
:: 清空DNS缓存
ipconfig /flushdns >> %logfile% 2>&1
echo ✓ DNS缓存已清空
:: 设置备用DNS(Google DNS)
echo 设置备用DNS服务器...
netsh interface ip set dns "以太网" static 8.8.8.8 primary >> %logfile% 2>&1
netsh interface ip add dns "以太网" 8.8.4.4 index=2 >> %logfile% 2>&1
echo [%date% %time%] DNS配置已修改 >> %logfile%
echo DNS配置已修改,等待生效...
:: 检测DNS修复结果
timeout /t 3 /nobreak >nul
ping -n 3 www.baidu.com >nul 2>&1
if %errorlevel% equ 0 (
    echo ✓ DNS修复成功!
) else (
    echo ✗ DNS修复失败,建议手动检查网络设置
)
goto :end
:end
echo.
echo ========================================
echo 检测日志已保存至: %logfile%
echo ========================================
echo.
pause

PowerShell 版本(功能更强大)

# 网络自动检测与修复脚本 (PowerShell)
# 保存为 NetworkDiagnostic.ps1
$logFile = "network_diagnostic_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "  网络自动检测与修复工具 (PowerShell)" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
function Write-Log {
    param([string]$message)
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    "$timestamp - $message" | Out-File $logFile -Append
    Write-Host $message
}
# 检测网络连接
Write-Log "开始网络检测..."
$pingResult = Test-Connection -ComputerName "8.8.8.8" -Count 3 -Quiet
if ($pingResult) {
    Write-Log "✓ 网络连接正常"
    # 检测DNS
    try {
        $dnsResult = [System.Net.Dns]::GetHostEntry("www.baidu.com")
        Write-Log "✓ DNS解析正常"
        Write-Log "所有检测通过,网络运行正常!"
        exit 0
    }
    catch {
        Write-Log "✗ DNS解析异常"
        Write-Log "开始修复DNS..."
        Fix-DNS
    }
}
else {
    Write-Log "✗ 网络连接异常"
    Write-Log "开始修复网络连接..."
    Fix-Network
}
function Fix-Network {
    Write-Log "====== 开始修复网络连接 ======"
    # 释放IP
    Write-Log "释放IP地址..."
    ipconfig /release | Out-File $logFile -Append
    Start-Sleep -Seconds 2
    # 更新IP
    Write-Log "更新IP地址..."
    ipconfig /renew | Out-File $logFile -Append
    Start-Sleep -Seconds 3
    # 清空DNS缓存
    Write-Log "清空DNS缓存..."
    ipconfig /flushdns | Out-File $logFile -Append
    # 重置网络
    Write-Log "重置网络适配器..."
    netsh int ip reset | Out-File $logFile -Append
    netsh winsock reset | Out-File $logFile -Append
    Write-Log "修复完成,等待网络恢复..."
    Start-Sleep -Seconds 5
    # 重新检测
    $retry = Test-Connection -ComputerName "8.8.8.8" -Count 3 -Quiet
    if ($retry) {
        Write-Log "✓ 修复成功!网络已恢复"
    } else {
        Write-Log "✗ 修复失败,建议检查物理连接"
    }
}
function Fix-DNS {
    Write-Log "====== 修复DNS配置 ======"
    # 清空DNS缓存
    ipconfig /flushdns | Out-File $logFile -Append
    Write-Log "✓ DNS缓存已清空"
    # 获取网络适配器名称
    $adapter = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Select-Object -First 1
    if ($adapter) {
        # 设置DNS
        Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ("8.8.8.8", "8.8.4.4")
        Write-Log "✓ DNS已设置为 Google DNS (8.8.8.8, 8.8.4.4)"
        Start-Sleep -Seconds 3
        # 验证DNS
        try {
            [System.Net.Dns]::GetHostEntry("www.baidu.com") | Out-Null
            Write-Log "✓ DNS修复成功"
        } catch {
            Write-Log "✗ DNS修复失败,建议手动检查"
        }
    } else {
        Write-Log "✗ 找不到活动的网络适配器"
    }
}
Write-Log ""
Write-Log "诊断日志已保存到: $logFile"
Read-Host "按Enter键退出"

使用方法

批处理版本:

  1. 将所有代码保存为 fixnetwork.bat
  2. 右键点击 - "以管理员身份运行"

PowerShell版本:

  1. 保存为 NetworkDiagnostic.ps1
  2. 以管理员身份运行 PowerShell
  3. 执行:Set-ExecutionPolicy RemoteSigned -Force
  4. 执行:.\NetworkDiagnostic.ps1

脚本功能说明

主要检测内容:

  • ✅ Ping外部IP(8.8.8.8)检测网络连通性
  • ✅ DNS解析测试
  • ✅ 自动释放/更新IP地址
  • ✅ 清空DNS缓存
  • ✅ 重置网络协议栈
  • ✅ 设置备用DNS服务器

修复操作:

  1. 自动释放并更新IP地址
  2. 清空DNS解析缓存
  3. 重置Winsock目录
  4. 重置网络适配器
  5. 设置Google公共DNS作为备用

注意事项:

  • ⚠️ 需要管理员权限运行
  • ⚠️ 部分操作会导致短暂断网
  • ⚠️ DNS修改可能需要手动恢复
  • 📝 所有操作都会记录到日志文件

这个脚本适合在遇到网络故障时快速诊断和修复常见问题,如果问题持续存在,建议检查物理连接或联系网络管理员。

抱歉,评论功能暂时关闭!