2012-07-13 49 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"