#powershell
Вопрос:
Я пытаюсь выполнить проверку регулярных выражений в файле журнала 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, — это выбрать строку расширения, извлечь из нее числовое значение и посмотреть, больше ли оно 0. В случае, если это не так, я покажу сообщение о том, что системные расширения не найдены, и если это так, я попытаюсь получить значение тех, которые включены. Проблема в том, что когда с помощью select-string я пытаюсь получить числовое значение в переменной, оно ничего не возвращает, хотя строка без переменной возвращает.
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'}
}
Я попробовал со следующими строками (изменив последующие, если), и переменные оказались пустыми:
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
Ответ №1:
Учитывая содержимое файла, которое вы упомянули, это должно дать вам номер из 2 extension(s)
строки:
(Select-String -Path $systemext.FullName -Pattern '^(?:d ) (?=extension(s))').Matches.Groups[0].Value
В вашем примере он должен просто выводить:
2
Если совпадения вообще нет (например, строка отсутствует или изменен формат), то вы, скорее всего, получите сообщение об ошибке при доступе Groups[0]
, поэтому вы можете разделить эту единственную строку на несколько шагов, чтобы проверить, сработала ли она, прежде чем пытаться получить доступ к результату.