首页 > 解决方案 > Powershell:根据日期范围获取事件日志

问题描述

下面的 Powershell 脚本效果很好。它进入我的 eventviewer 日志,捕获过去 24 小时内特定 eventid 的所有事件并将其导出到临时文件。我现在正在尝试修改此脚本,以便它仅向我显示以下日期范围(2020 年 1 月 7 日 - 2020 年 2 月 6 日)的数据。对于我的生活,我无法弄清楚。有谁知道如何添加日期范围?

Get-WinEvent -ProviderName $ProviderName -MaxEvents 64000 -EA SilentlyContinue | Where-Object 
  $_.id -in $EventID -and $_.Timecreated -gt (Get-date).AddHours(-24)
} | Sort TimeCreated -Descending | Export-Csv $Path -NoTypeInformation

标签: powershelldate-rangeevent-viewer

解决方案


由于您使用的是$_.id -in $EventID,因此我收集该变量$EventID是事件 id 的数组。如果不是并且这是单个事件 ID,请将其更改-in-eq.

要获取某个范围内的创建日期,您可以执行以下操作:

$startDate = (Get-Date -Year 2020 -Month 1 -Day 7).Date   # .Date makes it midnight
$endDate   = (Get-Date -Year 2020 -Month 2 -Day 6).Date

Get-WinEvent -ProviderName $ProviderName -MaxEvents 64000 -ErrorAction SilentlyContinue | 
    Where-Object { $_.id -in $EventID -and $_.Timecreated -ge $startDate -and $_.Timecreated -lt $endDate } |
    Sort-Object TimeCreated -Descending | Export-Csv $Path -NoTypeInformation

看到对 的用法有一些误解.Date,小解释一下:

使用该.Date属性意味着您放弃当前时间并在午夜获取日期,因为在那一刻,日期会发生变化。

上述代码将在包含开始日期和不包含结束日期之间进行过滤因此将返回从2020 年 1 月 7 日 00:00:00但不包括2020 年 2 月 6 日创建的所有事件。 在这种情况下,返回的最后一个事件可能是Feb. 5 2020 23:59:59

如果您希望返回的事件包括结束日期,只需添加 1 天,如

$endDate = (Get-Date -Year 2020 -Month 2 -Day 6).Date.AddDays(1)

现在,将返回从2020 年 1 月 7 日 00:00:00但不包括 2020 年 2 月 7日创建的所有事件。(包括 2020 年 2 月 6 日发生的所有事件)。
在这种情况下,返回的最后一个事件可能是Feb. 6 2020 23:59:59

希望能解释。


推荐阅读