Войти

Показать полную графическую версию : Отбор по дате


Cyril
28-12-2019, 12:11
Есть такой скрипт для вывода напечатанных заданий:
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colRetrievedEvents = objWMIService.ExecQuery _
("Select TimeGenerated,InsertionStrings from Win32_NTLogEvent where LogFile='System' and SourceName='Print' and EventCode = '10'")
For Each objEvent in colRetrievedEvents
Wscript.Echo objEvent.TimeGenerated & " " & objEvent.InsertionStrings(2) & " " & objEvent.InsertionStrings(3) & " " & objEvent.InsertionStrings(6) & " стр." & objEvent.InsertionStrings(1)
Next
1. Нужно изменить select, чтобы отбор был за текущий месяц
2. Нужно выводить objEvent.TimeGenerated в читаемом виде
3. Нужно вывести данные в csv файл
4. Нужно подсчитать сумму objEvent.InsertionStrings(6) по каждому значению из objEvent.InsertionStrings(3)

Iska
28-12-2019, 22:40
Cyril, какая ОС на той машине, с которой будут собираться данные логи?

Serguei Kouzmine
29-12-2019, 00:55
Cyril,
нужно - значит нужно
начинайте пожалуйста выполнять, и вам помогут

Cyril
30-12-2019, 09:40
ОС Windows 2003.
по пункту 1 я добавил в select "and TimeGenerated>='20191201'". Как задать текущий месяц - не знаю. Видимо надо сначала функцию Now использовать...
по второму пункту я могу только из строки вырезать подстроки и конкатенацией сконструировать строку с удобочитаемой датой.
dt = Mid(objEvent.TimeGenerated,7,2) & "." & Mid(objEvent.TimeGenerated,5,2) & "." & Mid(objEvent.TimeGenerated,1,4) & " " & Mid(objEvent.TimeGenerated,9,2) & ":" & Mid(objEvent.TimeGenerated,11,2)
с 3 пунктом я справился так:
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\print.csv", True)
For Each objEvent in colRetrievedEvents
str = objEvent.TimeGenerated & ";" & objEvent.InsertionStrings(2) & ";" & objEvent.InsertionStrings(3) & ";" & objEvent.InsertionStrings(6) & ";" & objEvent.InsertionStrings(1)
WScript.Echo str
tf.WriteLine (str)
Next
tf.Close
по 4 пункту, я так понял, надо объект dictionary использовать...

DJ Mogarych
30-12-2019, 10:03
Cyril, на Powershell не хотите реализовать?

Cyril
30-12-2019, 10:32
DJ Mogarych, На PS уже реализовал. Но оно долго работает. Get-EventLog пол минуты обрабатывает лог-файл.

Iska
01-01-2020, 14:18
ОС Windows 2003. »
К сожалению, у меня нет сейчас Windows Server 2003, а на новых ОС хранение уже в других жураналах, и в другом виде. Можно, конечно, под виртуальной машиной скрипт поотлаживать, но как-то нет большого желания :(.

Но оно долго работает. Get-EventLog пол минуты обрабатывает лог-файл. »
Cyril, а Вы думаете — на WSH быстрее будет? Я лично так не думаю. Разве что LogParser будете пользовать: по опыту он шустрее всего работал.

Cyril
09-01-2020, 10:23
Iska, на WSH немного быстрее получается. Нас интересуют только последние записи журнала. Смысла нет обрабатывать весь 16 мегабайтный лог файл.

DJ Mogarych
09-01-2020, 11:06
На PS уже реализовал. Но оно долго работает. Get-EventLog пол минуты обрабатывает лог-файл. »
Вот это долго работает? (записи за текущий месяц)

Get-EventLog System -After (get-date -f 01.MM.yyyy)

Cyril
09-01-2020, 12:01
DJ Mogarych, спасибо. так быстрее




© OSzone.net 2001-2012