# ========================================================= # MAX 网络工具箱 - WiFi 管理 # 查看 WiFi 密码 / 配置管理 / 适配器重启 # ========================================================= $Common = "C:\Setup\windows\lib\common.ps1" if (Test-Path $Common) { . $Common } # ========================================================= # 辅助函数 # ========================================================= function Get-WifiProfiles { $profiles = @() try { $output = netsh wlan show profiles 2>$null foreach ($line in $output) { if ($line -match ":\s*(.+)$") { $left = ($line -split ":", 2)[0].Trim() $right = ($line -split ":", 2)[1].Trim() if ($left -match "All User Profile|User Profile|所有用户配置文件|用户配置文件|所有使用者設定檔|使用者設定檔") { if (-not [string]::IsNullOrWhiteSpace($right)) { $profiles += $right } } } } } catch {} return @($profiles | Sort-Object -Unique) } function Get-WifiProfileDetail { param([string]$ProfileName) try { return netsh wlan show profile name="$ProfileName" key=clear 2>$null } catch { return @() } } function Get-WifiPassword { param([string]$ProfileName) $detail = Get-WifiProfileDetail -ProfileName $ProfileName foreach ($line in $detail) { if ($line -match ":\s*(.*)$") { $left = ($line -split ":", 2)[0].Trim() $right = ($line -split ":", 2)[1].Trim() if ($left -match "Key Content|关键内容|密钥内容|金鑰內容") { return $right } } } return "" } function Get-WifiAuthentication { param([string]$ProfileName) $detail = Get-WifiProfileDetail -ProfileName $ProfileName foreach ($line in $detail) { if ($line -match ":\s*(.*)$") { $left = ($line -split ":", 2)[0].Trim() $right = ($line -split ":", 2)[1].Trim() if ($left -match "Authentication|身份验证|认证|驗證") { return $right } } } return "" } function Get-WifiAdapters { try { return @(Get-NetAdapter -ErrorAction SilentlyContinue | Where-Object { $_.InterfaceDescription -match "Wireless|Wi-Fi|WLAN|802\.11|无线|無線" -or $_.Name -match "Wi-Fi|WLAN|Wireless|无线|無線" }) } catch { return @() } } # ========================================================= # 功能函数 # ========================================================= function Show-CurrentWifi { Write-Section "当前 WiFi 状态" try { $output = netsh wlan show interfaces 2>$null } catch { $output = @() } if (-not $output -or $output.Count -eq 0) { Write-Warn "未检测到 WLAN 接口,或 WLAN AutoConfig 服务未运行" return } $ssid = "" $state = "" $signal = "" foreach ($line in $output) { if ($line -match "^\s*SSID\s*:\s*(.+)$" -and $line -notmatch "BSSID") { $ssid = $Matches[1].Trim() } if ($line -match "^\s*(State|状态|狀態)\s*:\s*(.+)$") { $state = ($line -split ":", 2)[1].Trim() } if ($line -match "^\s*(Signal|信号|訊號)\s*:\s*(.+)$") { $signal = ($line -split ":", 2)[1].Trim() } } if ($ssid) { Write-OK "SSID: $ssid" } else { Write-Warn "当前未连接 WiFi" } if ($state) { Write-Info "状态: $state" } if ($signal) { Write-Info "信号: $signal" } } function Show-WifiProfiles { $profiles = Get-WifiProfiles Write-Section "已保存 WiFi 配置" if (-not $profiles -or $profiles.Count -eq 0) { Write-Warn "未找到已保存 WiFi 配置" return } $i = 1 foreach ($profile in $profiles) { Write-Info "$i. $profile" $i++ } } function Show-WifiPasswords { if (-not (Test-IsAdmin)) { Write-Warn "建议以管理员权限运行,否则部分密码可能读取不到" Write-Host "" } $profiles = Get-WifiProfiles if (-not $profiles -or $profiles.Count -eq 0) { Write-Warn "未找到已保存 WiFi 配置" return } Write-Section "WiFi 密码" Write-Warn "以下内容包含明文 WiFi 密码,请妥善保管" Write-Host "" foreach ($profile in $profiles) { $password = Get-WifiPassword -ProfileName $profile $auth = Get-WifiAuthentication -ProfileName $profile if ([string]::IsNullOrWhiteSpace($password)) { $password = "(空密码或未读取到)" } Write-OK "SSID: $profile" Write-Info "认证: $auth" Write-Info "密码: $password" Write-Host "" } } function Remove-WifiProfile { $profiles = Get-WifiProfiles if (-not $profiles -or $profiles.Count -eq 0) { Write-Warn "未找到已保存 WiFi 配置" return } Show-WifiProfiles Write-Host "" $name = Read-Host " 请输入要删除的 WiFi 名称" if ([string]::IsNullOrWhiteSpace($name)) { Write-Err "WiFi 名称不能为空" return } $confirm = Read-Host " 确认删除 [$name]?输入 YES 确认" if ($confirm -ne "YES") { Write-Warn "已取消" return } try { netsh wlan delete profile name="$name" Write-OK "已删除 WiFi 配置: $name" } catch { Write-Err "删除失败" Write-Muted $_.Exception.Message } } function Remove-AllWifiProfiles { $profiles = Get-WifiProfiles if (-not $profiles -or $profiles.Count -eq 0) { Write-Warn "未找到已保存 WiFi 配置" return } Write-Warn "即将删除所有已保存 WiFi 配置:" foreach ($profile in $profiles) { Write-Info "- $profile" } Write-Host "" $confirm = Read-Host " 高风险操作,输入 DELETE 确认" if ($confirm -ne "DELETE") { Write-Warn "已取消" return } foreach ($profile in $profiles) { try { netsh wlan delete profile name="$profile" | Out-Null Write-Warn "已删除: $profile" } catch { Write-Err "删除 $profile 失败" } } } function Restart-WifiAdapter { if (-not (Test-IsAdmin)) { Write-Err "刷新 WiFi 适配器需要管理员权限" return } $adapters = Get-WifiAdapters if (-not $adapters -or $adapters.Count -eq 0) { Write-Err "未找到无线网卡" return } Write-Section "刷新 WiFi 适配器" Write-Info "可用无线网卡:" for ($i = 0; $i -lt $adapters.Count; $i++) { Write-Info "$($i + 1). $($adapters[$i].Name) - $($adapters[$i].Status)" } Write-Host "" $choice = Read-Host " 请选择要刷新的网卡编号" if ($choice -notmatch "^\d+$") { Write-Err "输入无效" return } $index = [int]$choice - 1 if ($index -lt 0 -or $index -ge $adapters.Count) { Write-Err "编号无效" return } $adapter = $adapters[$index] try { Write-Warn "正在禁用: $($adapter.Name)" Disable-NetAdapter -Name $adapter.Name -Confirm:$false -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 Write-Info "正在启用: $($adapter.Name)" Enable-NetAdapter -Name $adapter.Name -Confirm:$false -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 Write-OK "WiFi 适配器 $($adapter.Name) 已刷新" } catch { Write-Err "刷新适配器失败" Write-Muted $_.Exception.Message } } function Export-WifiProfiles { $profiles = Get-WifiProfiles if (-not $profiles -or $profiles.Count -eq 0) { Write-Warn "未找到已保存 WiFi 配置" return } Write-Section "导出 WiFi 配置" Write-Warn "导出内容包含明文 WiFi 密码" $confirm = Read-Host " 输入 YES 确认导出" if ($confirm -ne "YES") { Write-Warn "已取消" return } $logDir = "C:\Setup\Logs" New-Item -ItemType Directory -Path $logDir -Force | Out-Null $file = Join-Path $logDir "wifi-profiles-$(Get-Date -Format 'yyyyMMdd-HHmmss').csv" $rows = foreach ($profile in $profiles) { [PSCustomObject]@{ SSID = $profile Authentication = Get-WifiAuthentication -ProfileName $profile Password = Get-WifiPassword -ProfileName $profile } } try { $rows | Export-Csv -Path $file -Encoding UTF8 -NoTypeInformation Write-OK "已导出: $file" } catch { Write-Err "导出失败" Write-Muted $_.Exception.Message } } # ========================================================= # 主循环 # ========================================================= do { Write-Header "WiFi 管理" Show-CurrentWifi Write-Line Write-Section "操作菜单" Write-Info "1. 查看已保存 WiFi 配置" Write-Info "2. 查看已保存 WiFi 密码" Write-Info "3. 删除指定 WiFi 配置" Write-Info "4. 删除全部 WiFi 配置" Write-Info "5. 刷新 WiFi 适配器" Write-Info "6. 导出 WiFi 配置和密码" Write-Info "0. 退出" Write-Host "" $choice = Read-Host " 请选择" Write-Line switch ($choice) { "1" { Show-WifiProfiles; Pause-Max } "2" { Show-WifiPasswords; Pause-Max } "3" { Remove-WifiProfile; Pause-Max } "4" { Remove-AllWifiProfiles; Pause-Max } "5" { Restart-WifiAdapter; Pause-Max } "6" { Export-WifiProfiles; Pause-Max } "0" { Write-OK "已退出" break } default { Write-Warn "无效选项" Pause-Max } } } while ($choice -ne "0")