怎样用脚本批量导出WiFi配置?

wen 实用脚本 1

如何用脚本批量导出WiFi配置?一文掌握核心技巧

目录导读

  1. 为什么需要批量导出WiFi配置?
  2. 批量导出的核心原理
  3. Windows环境下的脚本实现
  4. macOS/Linux环境下的脚本实战
  5. 跨平台通用方案:Python脚本
  6. 常见问题与解决方案(Q&A)
  7. 安全与隐私:导出后的配置如何保护?

为什么需要批量导出WiFi配置?

在企业或家庭网络环境中,我们经常遇到以下场景:

怎样用脚本批量导出WiFi配置?

  • 更换路由器后,需要重新输入数十个WiFi密码
  • 需要批量备份公司内部200台电脑的WiFi配置
  • 帮助亲友或客户快速恢复网络设置

用户痛点: 手动记录WiFi名称和密码效率极低,且容易出错,通过脚本批量导出WiFi配置,可以将原本需要2小时的工作压缩到5分钟内完成。


批量导出的核心原理

WiFi配置(SSID、密码、安全类型等)通常存储在操作系统的网络配置文件中:

  • Windows:存储在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\下的XML文件中
  • macOS:存储在/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
  • Linux:存储在/etc/NetworkManager/system-connections/目录下

脚本的核心逻辑是遍历这些配置文件,提取SSID和密码字段,并输出为可读格式(如TXT或CSV)。


Windows环境下的脚本实现

1 使用批处理脚本(适合初学者)

@echo off
setlocal enabledelayedexpansion
echo 正在导出所有WiFi配置...
echo 结果将保存到当前目录下的 wifi_config.txt
(for /f "skip=3 tokens=1*" %%a in ('netsh wlan show profiles') do (
    if "%%a"=="所有用户配置文件" (
        set "ssid=%%b"
        set "ssid=!ssid:~1!"
        for /f "skip=2 tokens=2 delims=:" %%c in ('netsh wlan show profile name="!ssid!" key=clear') do (
            if "%%c" NEQ "" (
                set "password=%%c"
                echo SSID: !ssid! 密码: !password!
            )
        )
    )
)) > wifi_config.txt
echo 完成!共导出 !count! 个配置。
pause

2 使用PowerShell脚本(更灵活)

$profiles = netsh wlan show profiles | Select-String "所有用户配置文件" | ForEach-Object {
    $_.ToString().Split(':')[1].Trim()
}
$result = foreach ($profile in $profiles) {
    $details = netsh wlan show profile name="$profile" key=clear
    $ssid = $profile
    $password = ($details | Select-String "关键内容" | ForEach-Object { $_.ToString().Split(':')[1].Trim() })
    [PSCustomObject]@{
        SSID = $ssid
        Password = $password
    }
}
$result | Export-Csv -Path "wifi_export.csv" -NoTypeInformation -Encoding UTF8
Write-Host "已导出" $result.Count "个WiFi配置到 wifi_export.csv"

执行方法: 以管理员身份运行PowerShell,复制上述代码即可。


macOS/Linux环境下的脚本实战

1 macOS专用脚本

#!/bin/bash
# 导出macOS所有WiFi配置
echo "SSID,Password" > wifi_config_mac.csv
security find-generic-password -wa "AirPort" 2>/dev/null | while IFS= read -r line; do
    # 提取SSID(需根据实际输出格式调整)
    ssid=$(echo "$line" | grep -oP '(?<=").*?(?=")')
    # 提取密码(需使用keychain工具)
    password=$(security find-generic-password -wa "$ssid" 2>/dev/null)
    echo "$ssid,$password" >> wifi_config_mac.csv
done
echo "完成!请查看 wifi_config_mac.csv"

2 Linux(NetworkManager)脚本

#!/bin/bash
# 适用于使用NetworkManager的Linux发行版
echo "SSID,Password" > wifi_config_linux.csv
for file in /etc/NetworkManager/system-connections/*; do
    if [ -f "$file" ]; then
        ssid=$(grep -oP '(?<=ssid=).*' "$file" | head -1)
        password=$(grep -oP '(?<=psk=).*' "$file" | head -1)
        if [ -n "$ssid" ] && [ -n "$password" ]; then
            echo "$ssid,$password" >> wifi_config_linux.csv
        fi
    fi
done
echo "完成!共导出 $(wc -l < wifi_config_linux.csv) 个配置"

注意: 需要root权限运行:sudo bash wifi_export.sh


跨平台通用方案:Python脚本

以下Python脚本可在Windows/macOS/Linux上运行,自动识别当前系统:

import os
import subprocess
import platform
import csv
def export_wifi_windows():
    """Windows系统导出"""
    output = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']).decode('utf-8')
    profiles = [line.split(':')[1].strip() for line in output.split('\n') if "所有用户配置文件" in line]
    configs = []
    for profile in profiles:
        details = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', f'name={profile}', 'key=clear']).decode('utf-8')
        password = "无密码"
        for line in details.split('\n'):
            if "关键内容" in line or "Key Content" in line:
                password = line.split(':')[1].strip()
                break
        configs.append([profile, password])
    return configs
def export_wifi_linux():
    """Linux系统导出"""
    profiles_dir = "/etc/NetworkManager/system-connections/"
    configs = []
    for file in os.listdir(profiles_dir):
        filepath = os.path.join(profiles_dir, file)
        if os.path.isfile(filepath):
            with open(filepath, 'r') as f:
                content = f.read()
                ssid = None
                password = None
                for line in content.split('\n'):
                    if line.startswith('ssid='):
                        ssid = line.split('=')[1]
                    if line.startswith('psk='):
                        password = line.split('=')[1]
                if ssid:
                    configs.append([ssid, password or "无密码"])
    return configs
def export_wifi_mac():
    """macOS系统导出(简化版)"""
    print("macOS导出需额外配置keychain权限,建议使用bash脚本")
    return []
def main():
    system = platform.system()
    if system == "Windows":
        configs = export_wifi_windows()
    elif system == "Linux":
        configs = export_wifi_linux()
    else:
        print("macOS暂不支持此Python脚本,请使用bash脚本")
        return
    filename = "wifi_export.csv"
    with open(filename, 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow(['SSID', 'Password'])
        writer.writerows(configs)
    print(f"成功导出 {len(configs)} 个WiFi配置到 {filename}")
if __name__ == "__main__":
    main()

使用方法:

  1. 保存为export_wifi.py
  2. 以管理员/root权限运行:python export_wifi.py

常见问题与解决方案(Q&A)

Q1:脚本运行提示“拒绝访问”?
A:必须以管理员权限运行,Windows右键选择“以管理员身份运行”,Linux/macOS使用sudo

Q2:导出的密码显示为“无密码”或空白?
A:部分企业WiFi使用802.1x认证,不存储明文密码,建议联系网络管理员获取。

Q3:如何只导出某个指定SSID的配置?
A:在脚本中添加过滤条件,例如修改Windows批处理脚本中的if "%%b"=="目标SSID"

Q4:能否导出隐藏WiFi的配置?
A:可以,只要设备之前成功连接过,系统就会存储完整配置。

Q5:导出后的CSV文件乱码怎么办?
A:确保编码为UTF-8,Windows用户可使用Excel导入功能选择UTF-8编码。


安全与隐私:导出后的配置如何保护?

重要提醒: 导出的WiFi密码文件非常敏感,切勿随意分享或上传到不安全的位置。

安全建议:

  1. 导出后立即对文件进行加密(如使用7-Zip设置密码)
  2. 使用后从回收站彻底删除文件(推荐使用shredcipher工具)
  3. 不要在公共网络(如公司内部群、邮件)中传输
  4. 建议使用临时生成的账号密码进行传输,使用后立即修改

通过以上脚本,您可以快速批量导出当前设备上所有已保存的WiFi配置,无论是Windows、macOS还是Linux系统,都能找到合适的方案,推荐优先使用Python脚本(跨平台)或PowerShell脚本(Windows深度用户)。

思考: 如果每次导出都需要管理员权限,是否可以考虑设计一个更安全的、无需root的脚本版本?欢迎在评论区讨论您的想法。

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