使用WMI查询事件日志非常简单,使用Win32_NTLogEvent,例如:
Get-WmiObject -query "SELECT *FROM Win32_NTLogEvent WHERE (logfile='Application' and SourceName='Something')
但是,如果我想查询包含使用 Windows 事件收集器收集的事件的日志,这些事件不会显示在结果中,即使同一日志中来自其他来源的事件会显示出来。
我可以使用 cmdletGet-Eventlog
来检索 WEC 事件,但这并不能解决我的问题。
我想做的是,__InstanceCreationEvent
当新事件插入日志时,使用并执行某些操作(将其转发到 kafka 实例)。请参阅来自 Scripting Guy 的示例和Logstash Eventlog 输入模块例如用法。
$query = "Select * from __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent' And (TargetInstance.LogFile = 'HardwareEvents')"
$Eventwatcher = New-Object management.managementEventWatcher $Query
$Event = $Eventwatcher.waitForNextEvent()
这对于普通日志来说非常有效,但对于来自 Windows 事件收集器的转发事件则无效。
有什么建议么?
答案1
在您的事件订阅中,如果您将“目标日志”设置为“系统”,并且如果您未logfile
在WHERE
条件中指定,则转发的事件将显示在结果中。这太奇怪了。