我正在尝试对macos日志文件systemextensions.txt执行正则表达式检查。以该文件的内容为例:
2 extension(s)
--- com.apple.system_extension.endpoint_security enabled active teamID bundleID (version) name [state]
GT8P3H7SPW com.mcafee.CMF.networkextension (10.7.6/1) McAfee Network Extension [terminated waiting to uninstall on reboot]
D3U2N4A6J7 com.protection.agent (02.00.07.1001/1.5.0) com.protection.agent [activated enabled]
我正在尝试,检查文件大小大于0后,是选择扩展(s)行,从中提取数值,看看它是否大于0。如果不是,我将显示一条消息,表示没有找到系统扩展,如果是,我将尝试获取那些已启用的系统扩展的值。问题是,当使用选择字符串时,我试图在变量中获取数值,它不返回任何东西,尽管没有变量的行返回。
If ($systemext.Length -gt 0)
{
$numext = Select-String $systemext.FullName -Pattern 'extension(s)' -SimpleMatch | Select-String -Pattern 'd'
If ($numext.Matches.value -eq 0) {Write-host = "No system extensions found"}
else {$extenabled = Select-String $systemext.FullName -Pattern 'activated enabled'}
}
我尝试了以下行(修改随后的if),变量结果是空的:
1 - .
$numext = Select-String $systemext.FullName -Pattern 'extension(s)' -SimpleMatch | Select-String -Pattern 'd' | foreach {$_.Matches.Value}
和2 - .
将$numext更改为
$numext = Select-String $systemext.FullName -Pattern 'extension(s)' -SimpleMatch
然后:
$test = ($numext | Select-String -Pattern 'd').Matches.Value
根据您提到的文件内容,这应该可以得到2 extension(s)
行的编号:
(Select-String -Path $systemext.FullName -Pattern '^(?:d+) (?=extension(s))').Matches.Groups[0].Value
在你的例子中,它应该简单地输出:2
如果根本没有匹配(例如该行丢失或更改格式),那么在访问Groups[0]
时可能会出现错误,因此您可能需要将这一行拆分为多个步骤,以检查它在尝试访问结果之前是否工作。