powershell Get-WinEvent cmdlt:通过时间戳过滤不产生预期的结果?

我正在尝试通过Get-WinEvent过滤事件以获取过去24小时的特定日志:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)} $LogonEvents = Get-WinEvent -FilterHashtable $EventLogFilter 

问题是,Get-WinEvent只返回14个事件,但有成千上达到这个标准。

例:

 $EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)} $LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter) $LogonEvents.count 14 

现在,如果我从Get-WinEvent中删除StartTimefilter并使用where对象进行过滤,则可以看到这些事件实际上有多less个:

 $EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768} $LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter) ($LogonEvents | ?{$_.TimeCreated -ge (Get-Date).Addhours(-24)}).count 19497 

所以它错过了近20,000个事件日志! 到底是怎么回事,我在做一些愚蠢的事情,是Get-WinEvent坏了吗? 在这个cmldet可以过滤并logging不可靠的结果之前,是否有限制日志的数量?

有人在另一个论坛FilterXML上给了我答案。

下面给了我想要的东西,增加了让GUI为我build立查询的便利:

 $FilterXML = '<QueryList> <Query Id="0" Path="ForwardedEvents"> <Select Path="ForwardedEvents">*[System[(EventID=4771 or EventID=4625 or EventID=4768) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select> </Query> </QueryList>' $LogonEvents = Get-WinEvent -FilterXml $FilterXML $LogonEvents | sort -Property TimeCreated | Select-Object -First 1 

做($ LogonEvents | sort -Property TimeCreated | Select-Object -First 1)我能够确认最古老的日志是完全24小时。

应该在文档中更多的是因为我没有事件了解-filterxml。 我想我会从现在开始使用它。