在PowerShell中搜索登录



我正在尝试使用powershell搜索特定字符串的日志 - 然后使用具有该字符串的行的特定部分。

我感兴趣的日志行:

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

我可以可以获得这些行的返回 - 但是我需要从其中一个字段中提取数据以用于另一个搜索。我被困在那里。如何从特定的"字段"中提取数据(|分离的字段以及从fieldname by =)的数据?

分开
$dir = "pathtoworkingdir"
$file = "logfilename"
$str2 = "eventType=59"
$out = (Get-Content $dir$file | Select-String -Pattern $str2 |out-string)

我需要提取并使用字段3中的数据进行日志搜索。我尝试过的任何事情似乎都可以返回我收到的所有东西。我似乎无法获得"拆分"或"索引"来正常工作(根本无法正常工作)。

将字符串带有其中的字段,您可以使用.Split()方法来获取项目。这样的东西...

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

...会给你这个...

data3

首先,您需要将日志消息与时间戳分开:

$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)
}

根据您的实际用例,您可以使用上面将日志消息转换为hashtable

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

然后将其用于进一步处理,例如

if ($data['eventType'] -eq '59') {
    # do some
} else {
    # do other
}

相关内容

  • 没有找到相关文章

最新更新