Макрос создаёт файл Excel, и выводит в него 2000 последних событий из журнала Windows:
Sub NTLogEvent() ' © 2022 ExcelVBA.ru Dim i&, sh As Worksheet Set sh = Workbooks.Add.Worksheets(1) ' создаём новый файл под вывод данных Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colLoggedEvents = objWMIService.ExecQuery("Select * from Win32_NTLogEvent " & "Where Logfile = 'System'") ' выводим заголовок таблицы sh.Range("a1").Resize(, 9).Value = Array("Category", _ "Computer Name", "Event Code", _ "Record Number", "Source Name", _ "Time Written", "Event Type", "User", "Message") Const LIMIT& = 2000 ' ограничение для количества записей For Each objEvent In colLoggedEvents ' перебираем записи журнала Windows Range("a" & Rows.Count).End(xlUp).Offset(1).Resize(, 9).Value = Array(objEvent.Category, _ objEvent.ComputerName, objEvent.EventCode, objEvent.RecordNumber, objEvent.SourceName, _ objEvent.TimeWritten, objEvent.Type, objEvent.User, objEvent.Message) i = i + 1: If i > LIMIT& Then Exit For Next sh.UsedRange.EntireColumn.AutoFit ' автоподбор ширины столбцов End Sub
Пример результата — на скриншоте:
Комментарии
Всё это можно сделать, правильно задавая параметры запроса после Where
Как именно - можно поискать в справке по WMI
Можно ли получить Forwarded Events? Простая смена в строке:
Where LogFile =
Дает результаты если менять только на другие, на это не работает.
А как можно установить фильтр для Event Code и для даты, чтоб обрабатывал только сообщения с кодом 4740 и за промежуток времени в 24 часа с момента запроса? Спасибо.
Отправить комментарий