我正在尝试使用正则表达式从ProductName
中删除KB编号。我得到的只是一个空字符串。
gwmi -cl win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" |
select @{LABEL = 'KB#' ; EXPRESSION = {(Select-string -Pattern '{^"KB"/w*$}' -InputObject $_.ProductName)}}|fl
答案 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'