Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用PyWin32为所有用户获取事件?_Python_Python 3.x_Pywin32 - Fatal编程技术网

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

Python 如何使用PyWin32为所有用户获取事件?,python,python-3.x,pywin32,Python,Python 3.x,Pywin32,我正在尝试创建一个python应用程序,它可以使用事件查看器检测启动、关闭、BSOD、Windows Update等事件,并将它们写入文件 但是,我发现我没有得到所有事件,也没有得到我要查找的事件(例如,事件ID 6005和6006-服务启动和关闭) 经过一些调试,我发现我只检索“用户”是“系统”的事件。如何更改此选项以从所有用户检索事件 以下是我目前的代码: import win32evtlog, win32evtlogutil computer = None # Work on the l

我正在尝试创建一个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()
导入win32evtlog,win32evtlogutil
计算机=无#仅在本地计算机上工作
logType=“系统”
冗长=错误
h=win32evtlog.OpenEventLog(无,日志类型)
numRecords=win32evtlog.GetNumberOfEventLogRecords(h)
numRead=0
numFiltered=0
打印(“记录数”+str(numRecords))
f=打开(“evts.txt”,“a”)
而1:
objects=win32evtlog.ReadEventLog(h,win32evtlog.EVENTLOG_向后_读取| win32evtlog.EVENTLOG_顺序_读取,0)
如果不是对象:
打破
对于对象中的对象:
event_id=object.EventID
如果事件id>2000且事件id<6006:
msg=win32evtlogutil.SafeFormatMessage(对象,日志类型)
f、 写入(str(object.EventID)+“\t |”+str(object.EventType)+”\t |\n“+msg)
numFiltered=numFiltered+1
numRead=numRead+len(对象)
打印(“读取的事件数:+str(numRead))
打印(“过滤事件数:+str(numFiltered))
f、 关闭()
此代码的输出仅返回ID为4000和4001的事件,但我可以在Windows事件查看器中看到更多内容

附言:

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