# ========================================================= # MAX 网络工具箱 - 快速修复网络 # 分级修复:DNS / 代理 / 网卡重启 / Winsock 重置 # ========================================================= $Common = "C:\Setup\windows\lib\common.ps1" if (Test-Path $Common) { . $Common } Show-AdminWarn # ========================================================= function Show-NetworkStatus { Write-Section "当前网络状态" try { Write-Info "IP 配置:" ipconfig | Select-String -Pattern "IPv4|Default Gateway|DNS|adapter|适配器|网关|DNS 服务器" | ForEach-Object { Write-Muted $_.Line.Trim() } Write-Host "" Write-Info "连通性测试:" foreach ($Target in @("dl.unvmax.com", "www.microsoft.com", "www.baidu.com")) { try { $Result = Test-NetConnection $Target -Port 443 -WarningAction SilentlyContinue if ($Result.TcpTestSucceeded) { Write-OK "$Target:443 可达" } else { Write-Warn "$Target:443 不可达" } } catch { Write-Warn "$Target 测试失败: $($_.Exception.Message)" } } } catch { Write-Err "获取网络状态失败" Write-Muted $_.Exception.Message } } function Safe-DnsRefresh { Write-Section "刷新 DNS (安全级别)" try { Write-Info "刷新 DNS 缓存..." ipconfig /flushdns Write-OK "DNS 缓存已刷新" Write-Info "重新注册 DNS..." ipconfig /registerdns Write-OK "DNS 已重新注册" } catch { Write-Err "DNS 刷新失败" Write-Muted $_.Exception.Message } } function Reset-ProxySafe { Write-Section "重置代理 (安全级别)" try { Write-Info "重置 WinHTTP 代理..." netsh winhttp reset proxy Write-OK "WinHTTP 代理已重置" Write-Info "禁用当前用户代理设置..." Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ` -Name ProxyEnable -Value 0 -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ` -Name ProxyServer -ErrorAction SilentlyContinue Write-OK "用户代理已禁用" } catch { Write-Err "代理重置失败" Write-Muted $_.Exception.Message } } function Restart-ActiveAdapters { Write-Section "重启网络适配器 (中度级别)" try { $Adapters = Get-NetAdapter -Physical -ErrorAction SilentlyContinue | Where-Object { $_.Status -eq "Up" } if (-not $Adapters) { Write-Warn "未找到活动的物理适配器" return } foreach ($Adapter in $Adapters) { Write-Info "正在重启: $($Adapter.Name)" Restart-NetAdapter -Name $Adapter.Name -Confirm:$false -ErrorAction Continue Write-OK "$($Adapter.Name) 已重启" } } catch { Write-Err "重启适配器失败" Write-Muted $_.Exception.Message } } function Full-NetworkReset { Write-Section "完全网络重置 (高风险)" Write-Warn "此操作将重置 Winsock 和 TCP/IP 栈,建议重启系统" $Confirm = Read-Host " 输入 YES 确认继续" if ($Confirm -ne "YES") { Write-Warn "已取消" return } try { Write-Info "重置 Winsock..." netsh winsock reset Write-OK "Winsock 已重置" Write-Info "重置 TCP/IP 栈..." netsh int ip reset Write-OK "TCP/IP 栈已重置" Write-Info "刷新 DNS 缓存..." ipconfig /flushdns Write-OK "DNS 缓存已刷新" Write-Line Write-OK "完全网络重置完成,请重启 Windows" Write-Warn "系统重启前网络可能不可用" } catch { Write-Err "网络重置失败" Write-Muted $_.Exception.Message } } # ========================================================= # 主循环 # ========================================================= do { Write-Header "快速修复网络" Show-NetworkStatus Write-Line Write-Section "修复选项" Write-Info "1. 安全 DNS 刷新 (刷新/注册 DNS)" Write-Info "2. 重置代理 (WinHTTP + 当前用户代理)" Write-Info "3. 重启活动网络适配器" Write-Info "4. 完全网络重置 (Winsock + TCP/IP,建议重启)" Write-Info "5. 组合修复 1+2 (安全修复)" Write-Info "0. 退出" Write-Host "" $Choice = Read-Host " 请选择" Write-Line switch ($Choice.Trim()) { "1" { Safe-DnsRefresh } "2" { Reset-ProxySafe } "3" { Restart-ActiveAdapters } "4" { Full-NetworkReset } "5" { Safe-DnsRefresh; Reset-ProxySafe } "0" { Write-OK "已退出" break } default { Write-Warn "无效选项" } } if ($Choice -ne "0") { Pause-Max } } while ($Choice -ne "0")