python - 如何使用 win32evtlog 列出带有限定符的 EventID
问题描述
运行简单的win32evtlog 时- 我可以列出大量事件 - 但是当我过滤到我需要的事件时;例如6005,它们没有出现。我已经过滤到那些可见并且可以找到的。
在以下代码(Python 3.7 和 win32 v222)中,如果您取出 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,因为我仍在学习 - 但我明白要点。
解决方案
Eeeeeventually - 我基本上需要在结果中添加 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 出于某种原因,这以前从未出现在搜索结果中......但是,在这里链接,因为它是一种类似的看待事物的方式。
推荐阅读
- ios - tns 预览无法识别通过 App_Resources 添加的 tabview tabItems 的 ios 图像
- spring - Spring Batch 作业因 FatalStepExecutionException 失败:JobRepository 失败强制回滚
- python - 获取“未知命令”异常调用“minimize_window”方法
- mysql - 将删除 30 天前的数据的 Mysql 分区
- angular - e2e 测试角度 7:失败:无法读取未定义的属性“fetchData”
- java - 在 pom 中添加依赖失败
- angular - 如何防止在 Angular 中将两个不兼容的指令分配给同一个元素?
- c# - Lucene .net 搜索具有不同序列的文本
- python - Python - 从不同的起始行读取同一个文件
- python - 保护 python 应用程序