如何使用win32evtlog列出带有限定符的eventid

2024-06-16 12:10:33 发布

您现在位置:Python中文网/ 问答频道 /正文

当运行一个简单的win32evtlog时,我可以列出大量的事件,但是当我筛选到我需要的事件时,例如6005,它们就不会出现。我已经过滤到那些是可见的,他们可以找到。你知道吗

在下面的代码(python3.7&win32v222)中,如果去掉6005的if语句,就会运行一系列事件。将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事件查看器中找到6005。你知道吗

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

我在写这个问题的时候做了一些研究,发现事件API对某些事件有不同的方法,因为它们包括限定符:

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

因此,我似乎需要找到一种方法来转换符合条件的事件(有时称为InstanceID),方法与此代码类似 Scalyr[行375+]
我无法破译atm的密码,因为我还在学习-但我明白要点。你知道吗


Tags: 方法代码eventreadif事件语句events
1条回答
网友
1楼 · 发布于 2024-06-16 12:10:33

eeeefinally-我基本上需要在结果上加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 由于某种原因,这从来没有出现在搜索结果之前,现在。。。但是,在这里链接,因为它是一个类似的东西看。你知道吗

相关问题 更多 >