从日志文件中获取最近30分钟

时间:2020-02-24 14:25:48

标签: powershell scripting

我有一个日志文件,我只想使用Powershell脚本检索该文件的最后30分钟的日志。

23:59:58 02/01/2020 multiple fields
23:59:58 02/01/2020 multiple fields
23:59:58 02/01/2020 multiple fields
23:59:58 02/01/2020 multiple fields

我知道我可以使用以下日期

$Date = Get-Date

这是返回的格式

lunes, 24 de febrero de 2020 10:30:38

如何使用它仅在30分钟左右检索日志?-

2 个答案:

答案 0 :(得分:1)

如果没有命令,则可以假设您的日志位于log.log中,执行以下操作:

$TargetTime = (Get-Date).AddMinutes(-30)
switch -File log.log {
    { [datetime]($_ -replace "(^\S+\s\S+).*",'$1') -ge $TargetTime } {
        $_
    }
}

-replace运算符使用正则表达式匹配字符串,然后替换匹配的字符串。 $1是捕获组1,它是与(^\S+\s\S+)匹配的字符串。

  • ^是字符串的开头。
  • \S+匹配非空格一次或多次(+)。
  • \s与空格字符匹配。
  • .*是0个或更多使用贪婪匹配的字符。这意味着匹配捕获组之后的所有内容。

使用Where-Object条件并结合您喜欢的文件读取方法,可以有效地完成上述操作。如果没有内存限制,switch往往会更快。

$TargetTime = (Get-Date).AddMinutes(-30)
Get-Content log.log | where {
    [datetime]($_ -replace "(^\S+\s\S+).*",'$1') -ge $TargetTime
}

如果数据按时间顺序升序,则可以在where()模式下使用SkipUntil方法。

$TargetTime = (Get-Date).AddMinutes(-30)
(Get-Content log.log).where({
    [datetime]($_ -replace "(^\S+\s\S+).*",'$1') -ge $TargetTime
},'SkipUntil')

答案 1 :(得分:0)

您可以将文件导入为csv,并使用DateTime功能比较日期和时间以获得所需的内容。

示例代码:(由于文件没有标题,因此您必须在标题中使用一些名称。

var delete_options = {
        'method': 'delete',
        'contentType': 'application/json',
        'muteHttpExceptions': true,
        'headers': {
           'Authorization' : 'bearer'+TOKEN;
           'Accept' : 'application/json'
        }
};