如何使用win32evtlog

时间:2019-06-21 09:40:10

标签: python windows events logging

运行简单的win32evtlog时-我可以列出大量事件-但是当我过滤所需的事件时;例如6005,它们没有出现。我已筛选出可见的内容,并且可以找到它们。

在以下代码(Python 3.7和win32 v222)上,如果取出6005的IF语句,则会得到一系列Event。将IF语句更改为数字之一;例如16,您应该会得到一些结果。

import win32evtlog as wlg

handle = wlg.OpenEventLog(None,'System')
flags = wlg.EVENTLOG_BACKWARDS_READ|wlg.EVENTLOG_SEQUENTIAL_READ

while True:
    events = wlg.ReadEventLog(handle, flags, 0)
    for event in events:
        if event.EventID == 6005:
            print('Event ID:', event.EventID)
            print('Time Generated:', event.TimeGenerated)

我可以使用Powershell返回结果,手动检查将在Windows Event Viewer中找到6005。

Get-EventLog -LogName system | where-object {$_.eventid -eq 6005}

在我撰写此问题时进行了一些研究-我发现Event API对于某些事件具有不同的方法,因为它们包括限定符:

<EventID Qualifiers="32768">6005</EventID>  

所以看来我需要找到一种方法来转换合格事件(有时称为InstanceID),方法与此代码相似 Scalyr [375行以上]
在我仍在学习的同时,我无法解密代码atm-但我明白了。

1 个答案:

答案 0 :(得分:0)

最终,我基本上需要在结果中加1位以得到正确的答案。

import win32evtlog as wlg

handle = wlg.OpenEventLog(None,'System')
flags = wlg.EVENTLOG_BACKWARDS_READ|wlg.EVENTLOG_SEQUENTIAL_READ

while True:
    events = wlg.ReadEventLog(handle, flags, 0)
    for event in events:
        if event.EventID & 0x1fff == 6005:
            print('Event ID:', event.EventID  & 0x1fff)
            print('Time Generated:', event.TimeGenerated)

然后研究其他东西-来自这里其他人的这个问题的答案Unusual event.EventID numbers like -2147481364 in Python using win32evtlog from Pywin32 由于某种原因,这在现在的搜索结果中从未出现过……但是,链接到这里是因为它看起来类似。