PowerShell从结果中搜索特定文本

时间:2015-02-04 04:40:46

标签: powershell powershell-v2.0 powershell-v3.0

我正在尝试获取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 {} 所以这样做会为每个线,但我卡住了。

1 个答案:

答案 0 :(得分:0)

$wlanprofiles | Select-String -Pattern "(?<=: ).+" | % { $_.Matches[0].Value }

(?<=: )从搜索结果中删除:,第0个匹配的值就是您需要的项目。另一种选择是:

$wlanprofiles | Select-String -Pattern ": (.+)" | % { $_.Matches.Groups[1].Value }

与每个结果中第一个捕获的组(.+)匹配。