Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Отбор по дате (http://forum.oszone.net/showthread.php?t=343461)

Cyril 28-12-2019 12:11 2902633

Отбор по дате
 
Есть такой скрипт для вывода напечатанных заданий:
Код:

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 2902677

Cyril, какая ОС на той машине, с которой будут собираться данные логи?

Serguei Kouzmine 29-12-2019 00:55 2902685

Cyril,
нужно - значит нужно
начинайте пожалуйста выполнять, и вам помогут

Cyril 30-12-2019 09:40 2902853

ОС 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 2902857

Cyril, на Powershell не хотите реализовать?

Cyril 30-12-2019 10:32 2902859

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

Iska 01-01-2020 14:18 2903081

Цитата:

Цитата Cyril
ОС Windows 2003. »

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

Цитата:

Цитата Cyril
Но оно долго работает. Get-EventLog пол минуты обрабатывает лог-файл. »

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

Cyril 09-01-2020 10:23 2904151

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

DJ Mogarych 09-01-2020 11:06 2904161

Цитата:

Цитата Cyril
На PS уже реализовал. Но оно долго работает. Get-EventLog пол минуты обрабатывает лог-файл. »

Вот это долго работает? (записи за текущий месяц)
Код:

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

Cyril 09-01-2020 12:01 2904168

DJ Mogarych, спасибо. так быстрее


Время: 10:18.

Время: 10:18.
© OSzone.net 2001-