regex - 使用正则表达式将文本提取到新列中

标签 regex powershell

我正在尝试编写修补程序报告自动化系统的脚本。我的第一次尝试是使用Get-Hotfix,但它仅报告知识库文章编号,而没有更新说明。

我读到了有关此内容的信息,但它自己的列中没有知识库文章编号。

我的脚本如下:

Get-WmiObject -cl Win32_ReliabilityRecords | 
    select @{LABEL = "date";EXPRESSION = {$_.ConvertToDateTime($_.TimeGenerated)}},
        @{LABEL = "KBArticle"; EXPRESSION = {(-match[regex]::'\(([^\ []*)\)/g').groups[1].value($_.productname)}},
        pscomputername, productname

当我运行它时,KBArticle列为空白。

我尝试了一条线的测试,并且有效。在另一个Stack Overflow帖子上找到了它。

$productname = "Update for Windows Server 2012 R2 (KB3118401)"
$r = [regex] "\(([^\[]*)\)"
$match = $r.Match("$productname")
$text = $match.Groups[1].Value

我也在一些在线正则表达式测试器中尝试过正则表达式,并且提取了我想要的文本。我的问题是我无法在脚本中使用它。

最佳答案

下面的代码确实提取了想要的代码。但是您可能需要在之后查看正则表达式。它将仅提取带有括号的知识库文章(以及带括号的其他内容)。
我还从您的第一个正则表达式中删除了“/ g”。

Get-WmiObject -Class win32_reliabilityRecords | Select-Object `
@{LABEL = "date"; EXPRESSION = {$_.ConvertToDateTime($_.timegenerated)}}, `
@{LABEL = "KBArticle"; EXPRESSION = {[regex]::Match($_.productname, '\(([^\ []*)\)').captures.groups[1].value}}, `
    pscomputername, productname

有关正则表达式,powershell和组的一些阅读
https://mcpmag.com/articles/2015/09/30/regex-groups-with-powershell.aspx

关于regex - 使用正则表达式将文本提取到新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219620/

相关文章:

powershell - 如何根据用户输入重新启动powershell程序

powershell - 在 Powershell 中将用户分配给 Active Directory native 应用程序 - 'C

powershell - 受域保护的 pfx 需要什么密码?

powershell - 简单脚本-将组和嵌套对象导出到文件中(动态)

javascript - 正则表达式匹配除模式之外的所有内容

java - 通过正则表达式分割,没有特定的范围

regex - ASP.NET MVC 正则表达式路由约束

powershell - 设置通讯组注释

python - 如何在Python中打破pandas数据框,其中行包含</s> </s>

regex - 正则表达式可以处理嵌套操作吗?