2012-07-13 40 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 | Foreach-Object {$_.AdminDisplayVersion.Build} 

基於以上,你可以像創建查詢:

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

酷!這太棒了,更實用! – Panicos 2012-07-13 11:08:35

0

您限制了您的正則表達式以「版本」(^\sVersion)開頭。這是正確的:

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

0

試着改變你的模式:

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