2012-07-13 2 views
0

이 Exchange 명령에 다음 정규식을 적용하려고하면 다음 오류가 발생합니다.Powershell Regex over array

@(Get-ExchangeServer | Format-List AdminDisplayVersion) | % { [regex]::Match($_, "^\sVersion (\d+\.\d+(\.\d+)?)\s").Success } 

명령 Get-ExchangeServer | Format-List AdminDisplayVersion 반환 다음

[PS] C:\Windows\system32>Get-ExchangeServer | Format-List AdminDisplayVersion 


AdminDisplayVersion : Version 14.0 (Build 442.3) 

AdminDisplayVersion : Version 14.0 (Build 442.3) 

을 그리고 거기에 정규식을 적용 할 때 나는 모든 거짓 얻을 : 현재

[PS] C:\Windows\system32>@(Get-ExchangeServer | Format-List AdminDisplayVersion) | % { [regex]::Match($_, "^\sVersion (\ 
d+\.\d+(\.\d+)?)\s").Success } 
False 
False 
False 
False 
False 
False 

모든 포인터를 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

AdminDisplayVersion이 속성으로 버전의 모든 부분이있는 Microsoft.Exchange.Data.ServerVersion 개체입니다. 문자열 조작에 의존하지 않고 직접 값을 가져올 수 있습니다. 빌드 부분은 무엇 인 경우, 찾고 재 :

Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion.Build -eq 123} 
+0

쿨 : 당신이 위의이 같은 쿼리를 생성 할 수 있습니다 바탕으로

Get-ExchangeServer | Foreach-Object {$_.AdminDisplayVersion.Build} 

! 환상적입니다. 훨씬 실용적입니다! – Panicos

0

"Version"(^\sVersion)으로 시작하는 정규 표현식을 제한했습니다. 여기에 올바른 하나입니다

% { [regex]::Match($_, "\sVersion (\d+\.\d+(\.\d+)?)\s").Success }

0

은 당신의 패턴을 변경해보십시오 :

"\sVersion (\d+\.\d+(\.\d+)?)\s"