поиск в логе powershell - PullRequest
       32

поиск в логе powershell

0 голосов
/ 25 февраля 2019

Я пытаюсь использовать powershell для поиска в журнале определенной строки, а затем использую определенный раздел строки, в которой есть эта строка.

Строки журнала, в которых я заинтересован, выглядят примерно так:

2019-02-25 11: 51: 37.394 field1 = data | field2 = data | field3 = data | field4 = data| field5 = data

Я могу получить возврат этих строк просто отлично - но затем мне нужно извлечь данные из одного из этих полей, чтобы использовать их для другого поиска.Я застрял там.Как извлечь данные из определенного «поля» (поля, разделенные | и данные, отделенные от имени поля =)?

$dir = "path\to\workingdir"
$file = "logfilename"
$str2 = "eventType=59"

$out = (Get-Content $dir\$file | Select-String -Pattern $str2 |out-string)

Мне нужно извлечь и использовать данные в поле 3 для другого поискажурнала.Все, что я пробовал, похоже, возвращает все, что я получаю в $ out.Кажется, я не могу заставить "split" или "indexof" работать должным образом (вообще) .... хотя я даже не уверен, что это то, что я должен пытаться использовать.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Прежде всего вы захотите отделить ваше сообщение журнала от отметки времени:

$line = '2019-02-25 11:51:37.394 field1=data|field2=data|field3=data|...'
$date, $time, $msg = $line.Split(' ', 3)

например, вот так, когда вы обрабатываете файл журнала:

Get-Content "${dir}\${file}" | ForEach-Object {
    $date, $time, $msg = $_.Split(' ', 3)
    # ...
}

Свременная метка, с помощью которой вы можете обработать только сообщение, разделив его разделителями:

$msg.Split('|') | ForEach-Object {
    $name, $value = $_.Split('=', 2)
}

В зависимости от фактического варианта использования вы можете использовать вышеприведенное для преобразования сообщения журнала в хеш-таблицу

$data = @{}
$msg.Split('|') | ForEach-Object {
    $name, $value = $_.Split('=', 2)
    $data[$name] = $value
}

, а затем использовать эту хеш-таблицу для дальнейшей обработки, например

if ($data['eventType'] -eq '59') {
    # do some
} else {
    # do other
}
0 голосов
/ 25 февраля 2019

Когда у вас есть строка с полями, вы можете использовать метод .Split(), чтобы получить элементы.как то так ...

'field1=data1|field2=data2|field3=data3|field4=data4|field5=data5'.Split('|')[2].Split('=')[1]

... даст тебе это ...

data3
...