首页 > 解决方案 > Powershell 从过去 5 分钟获取行

问题描述

我正在处理一个日志文件,我想过滤在过去 5 分钟内添加的消息,我不明白为什么[datetime]::ParseExact方法会以这种格式返回错误

日志格式

18-08-2021          12:00:00               Debug     127.0.0.1       hello

代码

$nowTime = (Get-Date).AddMinutes(-5)

Get-Content -Path "" |

Where-Object { $_ -match "^(\d{2}-\d{2}-\d{4}\t\d{2}:\d{2}:\d{2})" } |

Where-Object { [datetime]::ParseExact($matches[1], "dd-MM-yyyy `tHH:mm:ss", $null) -gt $nowTime } |

ForEach-Object {

  Write-Output $_

}

错误

"ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."

标签: powershell

解决方案


我认为分隔符格式不是您文件中的空格+制表符?

更改此部分

[datetime]::ParseExact($matches[1], "dd-MM-yyyy `tHH:mm:ss", $null)

省略 `t 之前的空格,如下所示,您的示例对我有用

$nowTime = (Get-Date).AddMinutes(-5)
Get-Content -Path "" |
Where-Object { $_ -match "^(\d{2}-\d{2}-\d{4}\t\d{2}:\d{2}:\d{2})" } |
  Where-Object { 
    [datetime]::ParseExact($matches[1], "dd-MM-yyyy`tHH:mm:ss", $null) -gt $nowTime 
  } |
  ForEach-Object {
    Write-Output $_
  }

推荐阅读