python - 读取特定 Windows 事件日志事件

标签 python windows event-log

我正在开发一个程序,需要知道如何根据记录号读取 Windows 事件日志的特定条目,该脚本已经具有该记录号。下面是我一直在使用的代码,但我不想遍历所有事件,直到找到我正在寻找的事件。有什么想法吗?

import win32evtlog

server = 'localhost' # name of the target computer to get event logs
logtype = 'System'
hand = win32evtlog.OpenEventLog(server,logtype)
flags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ
total = win32evtlog.GetNumberOfEventLogRecords(hand)

while True:
    events = win32evtlog.ReadEventLog(hand, flags,0)
    if events:
        for event in events:
            if event.EventID == "27035":
                print 'Event Category:', event.EventCategory
                print 'Time Generated:', event.TimeGenerated
                print 'Source Name:', event.SourceName
                print 'Event ID:', event.EventID
                print 'Event Type:', event.EventType
                data = event.StringInserts
                if data:
                    print 'Event Data:'
                    for msg in data:
                        print msg
                break

最佳答案

我意识到这是一个老问题,但我遇到了它,如果我遇到了,其他人也可能遇到。

您还可以编写自定义查询,这样您就可以通过编写脚本的任何 WMI 参数(包括事件 ID)进行查询。它还具有让您提取并清除所有那些在那里的 VBS WMI 查询的好处。实际上,我比其他任何人都更频繁地使用此功能。例如,请参阅:

这是一个在应用程序日志中查询特定事件的示例。我还没有充实它,但您也可以构建一个 WMI 时间字符串并查询特定日期/时间之间或之后的事件。

#! py -3

import wmi

def main():
    rval = 0  # Default: Check passes.

    # Initialize WMI objects and query.
    wmi_o = wmi.WMI('.')
    wql = ("SELECT * FROM Win32_NTLogEvent WHERE Logfile="
           "'Application' AND EventCode='3036'")

    # Query WMI object.
    wql_r = wmi_o.query(wql)

    if len(wql_r):
        rval = -1  # Check fails.

    return rval



if __name__ == '__main__':
    main()

关于python - 读取特定 Windows 事件日志事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219213/

相关文章:

Python - 编码错误 - cp850.py

python - keras 从 yolov2 加载自定义模型时出现问题

python - Windows 7/Vista 进程管理 - 如何在长时间空闲后启动外部程序?

python - 每年用 Pandas 绘制箱线图

python - 如何从 Pandas 中丝网打印两列值?

windows - ALT KEY 的虚拟键码

c# - 图像的分离和分析

c# - EventLogReader 和 EventRecord : Where's the Message?

c++ - 使用 C++ 登录到 Windows 上的事件查看器

c# - 获取操作日志EventLog失败