V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Poto
V2EX  ›  问与答

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

  •  
  •   Poto · 2022-01-11 18:37:33 +08:00 · 1409 次点击
    这是一个创建于 1051 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    请问这是否最优写法

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

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

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

    但似乎不能一条 PS 命令直出。
    ReVanTis
        5
    ReVanTis  
       2022-01-11 19:06:44 +08:00
    @Poto
    我也写 powershell 不多,随便写写你试试改改吧
    echo "Key Content : 12345678" | select-string 'Key Content .*: (.*)').matches.groups[1].value
    ysc3839
        7
    ysc3839  
       2022-01-11 19:40:55 +08:00
    一般不建议用正则来匹配,建议直接调底层接口。除非这个接口返回的就是很标准的文本,比如说 Linux 的 /proc/mtd ,返回的虽然是文本,但是格式是固定的。
    ysc3839
        8
    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++ 就没那么麻烦。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.