我正在尝试使用Regex从ProductName
中取出KB数。我得到的只是一根空绳子。
gwmi -cl win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" |
select @{LABEL = 'KB#' ; EXPRESSION = {(Select-string -Pattern '{^"KB"/w*$}' -InputObject $_.ProductName)}}|fl
这可能只是我对.NET正则表达式实现的有限了解和理解,但您的模式似乎毫无意义,请改用b(KBd+)b
:
Select @{n="KB";e={(Select-string -Pattern 'b(KBd+)b' -InputObject $_.ProductName).Matches[0].Captures[0]}}
Select-String
返回MatchInfo对象,而不是捕获的字符串本身。注意如何通过.Matches.Captures
访问实际匹配和捕获的文本
如果你只对数字感兴趣,而不是对整个字符串"KB????"感兴趣,你可以使用lookbacking跳过KB
部分:
Select-String -Pattern '(?<=KB)(d+)b'