PowerShell无法将Windows无线密码存入变量及日志文件问题
解决PowerShell获取无线密码时变量引用失败的问题
问题根源
你的$SSID变量实际是数组类型(从输出能看到重复的SSID值),因为Get-NetConnectionProfile返回了多个网络连接配置。当你把数组直接传入netsh命令的name参数时,PowerShell会将数组元素拼接成空格分隔的字符串,导致netsh无法识别这个无效的SSID;同时原代码中多余的反引号"也干扰了变量的正常解析。
解决方案
1. 确保$SSID为单个值
先对Get-NetConnectionProfile的结果做去重或取单个值处理,避免数组传入命令:
# 取第一个网络连接的SSID $SSID = (Get-NetConnectionProfile).Name | Select-Object -First 1 # 或者去重后取唯一值(适用于多个重复SSID的情况) # $SSID = (Get-NetConnectionProfile).Name | Get-Unique
2. 修正变量引用的引号写法
PowerShell中双引号字符串内可直接解析变量,无需用反引号转义,直接写成name="$SSID"即可。
完整修正代码
$SSID = (Get-NetConnectionProfile).Name | Select-Object -First 1 $PASSPHRASE = netsh.exe wlan show profiles name="$SSID" key=clear | Select-String -Pattern ".*Key Content.*:(.*)" -AllMatches Start-Transcript -Path "$home\Log.txt" netsh.exe wlan show interface Write-Output $PASSPHRASE Stop-Transcript
验证方法
执行前可以先检查$SSID的类型和值,确认是单个字符串:
$SSID = (Get-NetConnectionProfile).Name | Select-Object -First 1 $SSID.GetType() # 输出应为System.String Write-Output $SSID # 输出单个SSID值
内容的提问来源于stack exchange,提问作者Sgt.Foose
相关产品推荐
相关产品推荐

