PowerShell 如何直出当前连接的 WiFi 密码?正则匹配环节卡住

2022-01-11 18:37:33 +08:00
 Poto

我想用 PowerShell 直出当前连接的 WiFi 密码,适配中英文终端环境(中文是关键内容,英文是 Key Content )

比如我的 WiFi 密码是 12345678 ,就输出 12345678

我尝试过以下写法,但是输出的是关键内容整行。

请问这是否最优写法

Netsh wlan show profile name=(Get-NetConnectionProfile -InterfaceAlias WLAN).Name key=clear | Select-String "(关键内容|Key Content)\W+\:(.+?)"
1395 次点击
所在节点    问与答
8 条回复
ReVanTis
2022-01-11 18:43:57 +08:00
("Key Content : 12345678" -split ":")[1].Trim()
ReVanTis
2022-01-11 18:45:00 +08:00
其实有个小问题,密码里如果有冒号,这么简单的搞可能就不行了
Poto
2022-01-11 18:53:53 +08:00
@ReVanTis 如果是正则呢? C# 的正则提取。

(关键内容|Key Content)\W+\:(.+?)

这样的正则如果用 c# 的正则提取,只能输出「关键内容」这四个字,我不确定怎么解决。
Poto
2022-01-11 18:59:09 +08:00
@Poto 正则提取解决了。取组 2 。

但似乎不能一条 PS 命令直出。
ReVanTis
2022-01-11 19:06:44 +08:00
@Poto
我也写 powershell 不多,随便写写你试试改改吧
echo "Key Content : 12345678" | select-string 'Key Content .*: (.*)').matches.groups[1].value
Rheinmetal
2022-01-11 19:25:34 +08:00
ysc3839
2022-01-11 19:40:55 +08:00
一般不建议用正则来匹配,建议直接调底层接口。除非这个接口返回的就是很标准的文本,比如说 Linux 的 /proc/mtd ,返回的虽然是文本,但是格式是固定的。
ysc3839
2022-01-11 20:06:10 +08:00
去搜了一下,调 API 很简单,用 WlanGetProfile 就能获取到 https://www.codeproject.com/Articles/577445/Querying-Wireless-Settings-and-Decrypting-Wireless
主要麻烦是 PowerShell 调 Win32 API 需要自己写声明啥的,用 C++ 就没那么麻烦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/827645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX