如何用netsh查看所有WiFi密码?Ducky脚本执行问题求助
解决netsh批量导出WiFi密码仅显示第一个的问题
嘿,我之前碰到过一模一样的情况!用netsh wlan show profile * key=clear批量导出的时候,后面的WiFi条目总是丢了密码字段,这其实是Windows的netsh命令在处理批量输出时的小bug——通配符*的解析逻辑有时候没法正确加载所有配置文件的密码信息,导致只有第一个条目能完整显示密码。
下面给你两个靠谱的解决办法:
方法1:用批处理脚本逐个遍历导出
这个方法最稳妥,通过遍历每个WiFi配置文件,单独调用命令来确保每个条目都能输出完整密码:
@echo off setlocal enabledelayedexpansion set "outputFile=G:\Profiles.txt" :: 先清空输出文件(如果存在的话) if exist %outputFile% del %outputFile% :: 遍历所有WiFi配置文件名称 for /f "tokens=2 delims=:" %%i in ('netsh wlan show profiles ^| findstr "Profil"') do ( :: 去掉名称前后的空格 set "ssid=%%i" set "ssid=!ssid:~1!" :: 给每个WiFi条目添加分隔线,方便阅读 echo ================================================================ >> %outputFile% echo WiFi配置文件: !ssid! >> %outputFile% echo ================================================================ >> %outputFile% :: 单独导出当前WiFi的完整信息(包括密码) netsh wlan show profile name="!ssid!" key=clear >> %outputFile% echo. >> %outputFile% ) echo 导出完成!文件路径:%outputFile% endlocal
把这段代码保存成ExportWiFi.bat,双击运行就能在G盘生成完整的Profiles.txt,所有WiFi的密码都会显示出来。
方法2:用PowerShell脚本导出(更简洁)
如果你习惯用PowerShell,这个脚本同样能解决问题:
# 获取所有WiFi配置文件名称 $wifiProfiles = netsh wlan show profiles | Select-String -Pattern 'Profil\s*:\s*(.*)' | ForEach-Object { $_.Matches.Groups[1].Value.Trim() } # 遍历每个配置文件,导出详细信息 $outputContent = @() foreach ($profile in $wifiProfiles) { $outputContent += "================================================================" $outputContent += "WiFi配置文件: $profile" $outputContent += "================================================================" $outputContent += netsh wlan show profile name="$profile" key=clear $outputContent += "" } # 将内容写入文件 $outputContent | Out-File "G:\Profiles.txt" -Encoding UTF8 Write-Host "导出完成!文件路径:G:\Profiles.txt"
为什么这个问题会出现?
简单来说,netsh wlan show profile * key=clear的批量输出逻辑有缺陷,当同时加载多个配置文件的信息时,密码字段的解析会被跳过或者覆盖,而单独调用每个配置文件的命令时,系统会完整加载该配置的所有加密信息,自然就能正确显示密码了。
内容的提问来源于stack exchange,提问作者DoktorS




