Powershell无法获得成员输出

时间:2015-03-29 15:26:39

标签: regex powershell substring select-string

我正在尝试使用正则表达式从ProductName中删除KB编号。我得到的只是一个空字符串。

gwmi -cl win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" | 
select @{LABEL = 'KB#' ; EXPRESSION = {(Select-string -Pattern '{^"KB"/w*$}' -InputObject $_.ProductName)}}|fl

1 个答案:

答案 0 :(得分:2)

可能只是我对.NET正则表达式实现的有限接触和理解,但你的模式似乎根本没有意义,请尝试使用\b(KB\d+)\b

Select @{n="KB";e={(Select-string -Pattern '\b(KB\d+)\b' -InputObject $_.ProductName).Matches[0].Captures[0]}}

Select-String返回一个MatchInfo对象,而不是捕获的字符串本身。请注意如何通过.Matches.Captures

访问实际匹配和捕获的文本

如果您只对数字感兴趣,而不是整个字符串" KB ??????",您可以使用lookbehind跳过KB部分:

Select-String -Pattern '(?<=KB)(\d+)\b'