Powershell Regex over array
问题描述:
当试图在此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
任何指针作为我究竟做错了什么?
答
AdminDisplayVersion是具有所有版本的部分为属性Microsoft.Exchange.Data.ServerVersion对象。您可以直接获取值,而不必诉诸字符串操作。如果生成的部分是你;重新寻找:
Get-ExchangeServer | Foreach-Object {$_.AdminDisplayVersion.Build}
基于以上,你可以像创建查询:
Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion.Build -eq 123}
答
您限制了您的正则表达式以“版本”(^\sVersion
)开头。这是正确的:
% { [regex]::Match($_, "\sVersion (\d+\.\d+(\.\d+)?)\s").Success }
答
试着改变你的模式:
"\sVersion (\d+\.\d+(\.\d+)?)\s"
酷!这太棒了,更实用! – Panicos 2012-07-13 11:08:35