选择字符串后的变量不显示任何值



我正在尝试对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]时可能会出现错误,因此您可能需要将这一行拆分为多个步骤,以检查它在尝试访问结果之前是否工作。

相关内容

  • 没有找到相关文章

最新更新