我正在尝试获取Windows上保存的无线网络列表,然后为每个网络连接,并告诉网络自动连接。我只会在机器上只有一个保存的网络,我会在正常情况下运行它。这是我的初始脚本。
$wlanprofile = @()
$wlanprofiles = @()
$wlanprofiles = (netsh wlan show profiles) -join "" -replace "Profiles on interface .*User profiles------------- ","" -split " All User Profile : " -replace "All User Profile : ",""
ForEach($wlanprofile in $wlanprofiles){
netsh wlan connect name=$wlanprofile
Start-Sleep -Seconds 5
netsh wlan set profileparameter name=$wlanprofile connectionmode=auto
}
返回:
Hub
dlink
Belkin.5076
唯一的问题是,这在很大程度上依赖于静态文本,我想通过select-string,pattern,exclude和/或include来使用更多的智能来获得相同的结果。
这是我到目前为止所做的:
$wlanprofiles = (netsh wlan show profiles)
$wlanprofiles | Select-String -Pattern ": "
这使得我只需要在其中删除前几行,例如“。”。
All User Profile : Hub
All User Profile : dlink
All User Profile : Belkin.5076
但是,我想更进一步,删除“:”以及每行之前的所有内容,例如: “*:”。所以我只会这样做:
Hub
dlink
Belkin.5076
我想我需要添加一个表达式或其他 Select-String with exclude或include with wildcards,也许还有一个 foreach {} 所以这样做会为每个线,但我卡住了。
答案 0 :(得分:0)
$wlanprofiles | Select-String -Pattern "(?<=: ).+" | % { $_.Matches[0].Value }
(?<=: )
从搜索结果中删除:
,第0个匹配的值就是您需要的项目。另一种选择是:
$wlanprofiles | Select-String -Pattern ": (.+)" | % { $_.Matches.Groups[1].Value }
与每个结果中第一个捕获的组(.+)
匹配。