2015-02-04 2 views
0

Windows에 저장된 무선 네트워크 목록을 얻으려는 경우 각각에 대해 연결하고 네트워크에 자동 연결하도록 지시합니다. 나는 정상적인 상황에서 이것을 실행할 기계에 단지 하나의 저장된 네트워크 만 가질 것이다. 여기에 내가 가진 초기 스크립트가 있습니다.PowerShell 결과의 특정 텍스트 검색

$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 

, 이것은 정적 텍스트에 너무 많이 의존, 내가 선택 문자열의 방법으로 저에게 동일한 결과를 얻을이 더 현명함을 사용하고 싶었, 패턴, 제외 및/또는 포함 할 수 있습니다. ":"그들 예를 들어, 처음 몇 줄을 제거

$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 

을 내가 그래서이 그것을 수행} 표현식 또는 제외하거나 와일드 카드를 포함하여 다른 선택 문자열, 어쩌면 foreach는 {중 하나를 추가 할 필요가 있다고 생각 각 줄마다,하지만 나는 붙어있다.

답변

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

(?<=:)은 검색 결과에서 :을 제거하고, 0 번째 경기의 가치는 당신이 필요로하는 항목입니다. 또 다른 방법은 각각의 결과에 처음 캡쳐 그룹 (.+) 일치

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

.

+0

완벽하게 작동합니다. 대단히 감사합니다! –

+0

정답으로 표시하려면 체크 표시 (왼쪽)를 사용해야합니다. –

관련 문제