Poto
V2EX  ›  问与答

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

  •  
  •   Poto · Jan 11, 2022 · 2095 views
    This topic created in 1586 days ago, the information mentioned may be changed or developed.

    我想用 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 replies    2022-01-11 20:06:10 +08:00
    ReVanTis
        1
    ReVanTis  
       Jan 11, 2022
    ("Key Content : 12345678" -split ":")[1].Trim()
    ReVanTis
        2
    ReVanTis  
       Jan 11, 2022
    其实有个小问题,密码里如果有冒号,这么简单的搞可能就不行了
    Poto
        3
    Poto  
    OP
       Jan 11, 2022
    @ReVanTis 如果是正则呢? C# 的正则提取。

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

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

    但似乎不能一条 PS 命令直出。
    ReVanTis
        5
    ReVanTis  
       Jan 11, 2022
    @Poto
    我也写 powershell 不多,随便写写你试试改改吧
    echo "Key Content : 12345678" | select-string 'Key Content .*: (.*)').matches.groups[1].value
    ysc3839
        7
    ysc3839  
       Jan 11, 2022
    一般不建议用正则来匹配,建议直接调底层接口。除非这个接口返回的就是很标准的文本,比如说 Linux 的 /proc/mtd ,返回的虽然是文本,但是格式是固定的。
    ysc3839
        8
    ysc3839  
       Jan 11, 2022
    去搜了一下,调 API 很简单,用 WlanGetProfile 就能获取到 https://www.codeproject.com/Articles/577445/Querying-Wireless-Settings-and-Decrypting-Wireless
    主要麻烦是 PowerShell 调 Win32 API 需要自己写声明啥的,用 C++ 就没那么麻烦。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 15:11 · PVG 23:11 · LAX 08:11 · JFK 11:11
    ♥ Do have faith in what you're doing.