从事件日志.net或powershell中识别第一个和最后一个事件

时间:2017-02-13 15:22:09

标签: .net powershell

我正在尝试在离线evtx文件中找到第一个和最后一个事件时间戳。我试图使用PowerShell的EventLogReader.Seek方法(SeekOrigin,Int64)。我知道如何根据事件ID找到事件,如下所示。

$reader = [Diagnostics.Eventing.Reader.EventLogReader]::new(
    [Diagnostics.Eventing.Reader.EventLogQuery]::new($eventLogPath,
        [Diagnostics.Eventing.Reader.PathType]::FilePath, $query)
)

如何在类似上面的查询中找到第一个和最后一个事件?感谢

1 个答案:

答案 0 :(得分:0)

默认情况下,

$reader会从最旧的事件读取到最新的事件,除非ReverseDirection对象上的EventLogQuery属性设置为$true

# create default reader
$queryObject = [Diagnostics.Eventing.Reader.EventLogQuery]::new($eventLogPath, 'FilePath', $query)
$forwardReader = [Diagnostics.Eventing.Reader.EventLogReader]::new($queryObject)

# read oldest event
$oldestEvent = $forwardReader.ReadEvent()

# Now change the query direction and create a new reader
$queryObject.ReverseDirection = $true
$reverseReader = [Diagnostics.Eventing.Reader.EventLogReader]::new($queryObject)

# read the newest event
$newestEvent = $forwardReader.ReadEvent()

不需要手动执行上述任何操作,但您可以使用the Get-WinEvent cmdlet代替:

$oldestEvent = Get-WinEvent -Path $eventLogPath -FilterXPath $query -MaxEvents 1 -Oldest 
$newestEvent = Get-WinEvent -Path $eventLogPath -FilterXPath $query -MaxEvents 1