Как извлечь несколько строк из файлов журнала

#powershell

#powershell

Вопрос:

Я пытаюсь извлечь несколько строк из файлов журнала. Пока все хорошо. Но я не знаю, как извлечь из этого результата только необходимые детали.

Пример

Запись в журнале выглядит следующим образом:

 (DIAG:XMLRPC)(11:07:01 15/04/2019)(MEM:130590)(TID:3632)(USER:Administrator)(REMOTE:10.67.125.177:59032)(XmlRpc: called method 'QueryCreativeFilterInfoList'.31)
 

Я могу разобрать его с помощью следующего кода:

 $output_file = 'C:Copy-Testlogins.txt'
$regex = 'QueryCreativeFilterInfoList'
$files = Get-ChildItem "C:Copy-TestLogs"

foreach ($file in $files)
 {
    gc $file.FullName | select-string -Pattern $regex | Select-String -Pattern "Administrator" | Out-File -FilePath $output_file -Append
}
 

Теперь я хотел бы вывести только данные, имя пользователя time, но я не знаю, как это сделать. Я видел некоторые сумасшедшие регулярные выражения, но это было намного выше моего уровня квалификации.

Я был бы признателен, если бы кто-нибудь мог помочь мне в этом

Комментарии:

1. Все ли круглые скобки буквальны в вашей строке примера?

2. @LotPings да, они являются частью этого

Ответ №1:

Самый простой способ — разделить строку записи журнала с помощью )( разделителя, а затем распечатать элементы результирующего массива. Что-то вроде этого:

 gc $file.FullName | select-string -Pattern $regex | Select-String -Pattern "Administrator"| foreach {
   $a=$_ -split ")("
   "$(($a[1] -split " ")[1,0] -join ' ') $($a[4].substring(5))"
}
 

Комментарии:

1. большое вам спасибо, это помогает. Теперь вывод выглядит следующим образом: 11:07:01 15/04/2019 ПОЛЬЗОВАТЕЛЬ: Администратор Можно ли в дальнейшем форматировать его так: Дата Время Имя пользователя —- —— ——— 15/04/2019 11:07:01 Администратор ?