0

我正在尝试使用 Regex 从ProductName. 我得到的只是一个空字符串。

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

1 回答 1

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??????”,则可以使用后视跳过该KB部分:

Select-String -Pattern '(?<=KB)(\d+)\b'
于 2015-03-29T19:16:18.937 回答