无法使用日期查询Windows事件日志“转发事件”

时间:2017-04-19 12:00:48

标签: windows powershell events logging event-log

我们正在尝试创建PowerShell函数,以便在Windows事件日志中查询两个日期之间发生的事件。 查询自定义日志或标准日志时,以下代码可以正常工作:

$FilterXML = @"
<QueryList>
    <Query Id="0" Path='$LogName'>
        <Select Path='$LogName'>
            *[System[TimeCreated[@SystemTime&gt;='2017-04-17T09:48:24.000Z' and 
            @SystemTime&lt;='2017-04-19T09:50:24.999Z']]]
        </Select>
    </Query>
</QueryList>
"@
Get-WinEvent -FilterXml $FilterXML

我们已将Windows Server 2012设置为从其他服务器(如Windows Server 2008 R2)收集事件。在事件查看器中检查事件时,我们可以看到它们在日志Forwarded Events中可用。在GUI或PowerShell中没有日期查询它们时,这非常合适。

然而。当我们想要在GUI或PowerShell中查询相同的“转发事件”日志时,通过添加日期From和日期来选择,它只是说找不到匹配项。这是不正确的,因为当我们检查这些事件时,它们都具有TimeCreated属性,其日期介于这些日期之间。

Get-WinEvent : No events were found that match the specified selection criteria.

在创建事件的源计算机上运行相同的查询时,它可以正常使用日期。在收集器服务器上,当仅选择过去7天或24小时内的事件时,这也可以正常工作。所以它与事件的转发和我猜中的DateTime对象有关。我们检查了两台服务器上的区域设置,它们与日期格式的荷兰语(比利时)相同。

无法使用日期的示例事件:

Message              : johofman - Script ended
Id                   : 199
Version              : 
Qualifiers           : 0
Level                : 4
Task                 : 1
Opcode               : 
Keywords             : 36028797018963968
RecordId             : 768
ProviderName         : My script name
ProviderId           : 
LogName              : My log name
ProcessId            : 
ThreadId             : 
MachineName          : SERVER.domain.net
UserId               : 
TimeCreated          : 19/04/2017 16:02:56
ActivityId           : 
RelatedActivityId    : 
ContainerLog         : c:\windows\system32\winevt\logs\forwardedevents.evtx
MatchedQueryIds      : {}
Bookmark             : System.Diagnostics.Eventing.Reader.EventBookmark
LevelDisplayName     : Information
OpcodeDisplayName    : Info
TaskDisplayName      : 
KeywordsDisplayNames : {Classic}
Properties           : {System.Diagnostics.Eventing.Reader.EventProperty}

这是为什么这适用于所有事件日志而不适用于Forwarded Events

事件记录已按照here所述进行配置。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如何尝试使用-filterHashTable?例如:

$filter = @{ 
                    Path   = "$env:SystemRoot\System32\Winevt\Logs\ForwardedEvents.evtx"
                    StartTime = get-date '2017-04-17T09:48:24.000Z'
                    EndTime   = get-date '2017-04-19T09:50:24.999Z'                  
                    }

然后

$events = Get-WinEvent -FilterHashtable $filter