我有一个日志文件,我只想使用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分钟左右检索日志?-
答案 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'
}
};