PowerShell正则解析报Unrecognized grouping construct错误求助
PowerShell查询Windows更新历史正则报错修复
错误根因
- 正则语法非法:报错位置的split正则
.*\((?KB\d{6,7})\)存在不符合.NET正则规则的写法。PowerShell默认使用.NET正则引擎,规则中(?是特殊分组构造的起始标记,后面必须跟随合法的分组类型标识(比如命名捕获<组名>、非捕获分组:、正向断言=等),此处直接在(?后拼接KB属于无法识别的分组构造,直接触发解析错误。 - 额外脚本笔误:末尾排序命令的属性名书写错误,
Sort-Object -Property nInstalledO中nInstalledO应为InstalledOn,否则排序逻辑完全不生效。
修复方法
这段split的原设计逻辑是匹配截断更新标题中KB编号及之前的内容,提取后续的更新名称,只需要删除正则中多余的非法字符?即可,修正后的第9行代码如下:
$Title = ($_.Title -split '.*\((KB\d{6,7})\)')[1]
更稳妥的写法:分支中已经通过-match完成了KB格式校验,匹配成功后可以直接用替换操作实现同样效果,避免split数组索引可能引发的异常:
$Title = $_.Title -replace '^.*?\(KB\d{6,7}\)\s*', ''
同时修正末尾排序的属性名笔误,把:
} | Sort-Object -Descending:$true -Property nInstalledO |
改成:
} | Sort-Object -Descending:$true -Property InstalledOn |
修正后脚本就不会抛出正则错误,且排序逻辑正常生效。
内容的提问来源于stack exchange,提问作者Mujtaba
相关产品推荐
相关产品推荐

