如何使用PyWin32为所有用户获取事件?

2024-09-30 05:21:29 发布

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

我正在尝试创建一个python应用程序,它可以使用事件查看器检测启动、关闭、BSOD、Windows Update等事件,并将它们写入文件

但是,我发现我没有得到所有事件,也没有得到我要查找的事件(例如,事件ID 6005和6006-服务启动和关闭)

经过一些调试,我发现我只检索“用户”是“系统”的事件。如何更改此选项以从所有用户检索事件

以下是我目前的代码:

import win32evtlog, win32evtlogutil

computer = None # Work on the local machine only
logType = "System"
verbose = False

h=win32evtlog.OpenEventLog(None, logType)
numRecords = win32evtlog.GetNumberOfEventLogRecords(h)
numRead = 0
numFiltered = 0
print("Number of Records " + str(numRecords))
f = open("evts.txt", "a")
while 1:
    objects = win32evtlog.ReadEventLog(h, win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ, 0)

    if not objects:
        break
    for object in objects:
        event_id = object.EventID
        if event_id > 2000 and event_id < 6006:
            msg = win32evtlogutil.SafeFormatMessage(object, logType)
            f.write(str(object.EventID) + "\t| " + str(object.EventType) + "\t| \n" + msg)
            numFiltered = numFiltered + 1
    numRead = numRead + len(objects)

print("Number of events read: " + str(numRead))
print("Number of filtered events: " + str(numFiltered))
f.close()

此代码的输出仅返回ID为4000和4001的事件,但我可以在Windows事件查看器中看到更多内容

附言:

  • 在Windows 10中以管理员身份运行脚本似乎无法解决此问题
  • 我在虚拟环境中使用Windows10上的Python3.7.5(64位)

Tags: ofeventidnumberobjectsobjectwindows事件

热门问题