Пора поговорить про удобную работу с логами, тем более что в Windows есть масса неочевидных инструментов для этого. Например, Log Parser, который порой просто незаменим.
В статье не будет про серьезные вещи вроде Splunk и ELK (Elasticsearch + Logstash + Kibana). Сфокусируемся на простом и бесплатном.
Журналы и командная строка
До появления PowerShell можно было использовать такие утилиты cmd как find и findstr. Они вполне подходят для простой автоматизации. Например, когда мне понадобилось отлавливать ошибки в обмене 1С 7.7 я использовал в скриптах обмена простую команду:
findstr "Fail" *.log >> fail.txt
Она позволяла получить в файле fail.txt все ошибки обмена. Но если было нужно что-то большее, вроде получения информации о предшествующей ошибке, то приходилось создавать монструозные скрипты с циклами for или использовать сторонние утилиты. По счастью, с появлением PowerShell эти проблемы ушли в прошлое.
Основным инструментом для работы с текстовыми журналами является командлет Get-Content, предназначенный для отображения содержимого текстового файла. Например, для вывода журнала сервиса WSUS в консоль можно использовать команду:
Get-Content -Path 'C:\Program Files\Update Services\LogFiles\SoftwareDistribution.log' | Out-Host -Paging
Для вывода последних строк журнала существует параметр Tail, который в паре с параметром Wait позволит смотреть за журналом в режиме онлайн. Посмотрим, как идет обновление системы командой:
>Get-Content -Path "C:\Windows\WindowsUpdate.log" -Tail 5 -Wait
Смотрим за ходом обновления Windows.
Если же нам нужно отловить в журналах определенные события, то поможет командлет Select-String, который позволяет отобразить только строки, подходящие под маску поиска. Посмотрим на последние блокировки Windows Firewall:
Select-String -Path "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" -Pattern 'Drop' | Select-Object -Last 20 | Format-Table Line
Смотрим, кто пытается пролезть на наш дедик.
При необходимости посмотреть в журнале строки перед и после нужной, можно использовать параметр Context. Например, для вывода трех строк после и трех строк перед ошибкой можно использовать команду:
Select-String 'C:\Windows\Cluster\Reports\Cluster.log' -Pattern ' err ' ‑Context 3
Оба полезных командлета можно объединить. Например, для вывода строк с 45 по 75 из netlogon.log поможет команда:
Get-Content 'C:\Windows\debug\netlogon.log' | Select-Object -First 30 -Skip 45
Журналы системы ведутся в формате .evtx, и для работы с ними существуют отдельные командлеты. Для работы с классическими журналами («Приложение», «Система», и т.д.) используется Get-Eventlog. Этот командлет удобен, но не позволяет работать с остальными журналами приложений и служб. Для работы с любыми журналами, включая классические, существует более универсальный вариант ― Get-WinEvent. Остановимся на нем подробнее.
Для получения списка доступных системных журналов можно выполнить следующую команду:
Get-WinEvent -ListLog *
Вывод доступных журналов и информации о них.
Для просмотра какого-то конкретного журнала нужно лишь добавить его имя. Для примера получим последние 20 записей из журнала System командой:
Get-WinEvent -LogName 'System' -MaxEvents 20
Последние записи в журнале System.
Для получения определенных событий удобнее всего использовать хэш-таблицы. Подробнее о работе с хэш-таблицами в PowerShell можно прочитать в материале Technet about_Hash_Tables.
Для примера получим все события из журнала System с кодом события 1 и 6013.
Get-WinEvent -FilterHashTable @{LogName='System';ID='1','6013'}
В случае если надо получить события определенного типа ― предупреждения или ошибки, ― нужно использовать фильтр по важности (Level). Возможны следующие значения:
- 0 ― всегда записывать;
- 1 ― критический;
- 2 ― ошибка;
- 3 ― предупреждение;
- 4 ― информация;
- 5 ― подробный (Verbose).
Собрать хэш-таблицу с несколькими значениями важности одной командой так просто не получится. Если мы хотим получить ошибки и предупреждения из системного журнала, можно воспользоваться дополнительной фильтрацией при помощи Where-Object:
Get-WinEvent -FilterHashtable @{LogName='system'} | Where-Object -FilterScript {($_.Level -eq 2) -or ($_.Level -eq 3)}
Ошибки и предупреждения журнала System.
Аналогичным образом можно собирать таблицу, фильтруя непосредственно по тексту события и по времени.
Подробнее почитать про работу обоих командлетов для работы с системными журналами можно в документации PowerShell:
- Get-EventLog.
- Get-WinEvent.
PowerShell ― механизм удобный и гибкий, но требует знания синтаксиса и для сложных условий и обработки большого количества файлов потребует написания полноценных скриптов. Но есть вариант обойтись всего-лишь SQL-запросами при помощи замечательного Log Parser.
Работаем с журналами посредством запросов SQL
Утилита Log Parser появилась на свет в начале «нулевых» и с тех пор успела обзавестись официальной графической оболочкой. Тем не менее актуальности своей она не потеряла и до сих пор остается для меня одним из самых любимых инструментов для анализа логов. Загрузить утилиту можно в Центре Загрузок Microsoft, графический интерфейс к ней ― в галерее Technet. О графическом интерфейсе чуть позже, начнем с самой утилиты.
О возможностях Log Parser уже рассказывалось в материале «LogParser — привычный взгляд на непривычные вещи», поэтому я начну с конкретных примеров.
Для начала разберемся с текстовыми файлами ― например, получим список подключений по RDP, заблокированных нашим фаерволом. Для получения такой информации вполне подойдет следующий SQL-запрос:
SELECT
extract_token(text, 0, ' ') as date,
extract_token(text, 1, ' ') as time,
extract_token(text, 2, ' ') as action,
extract_token(text, 4, ' ') as src-ip,
extract_token(text, 7, ' ') as port
FROM 'C:\Windows\System32\LogFiles\Firewall\pfirewall.log'
WHERE action='DROP' AND port='3389'
ORDER BY date,time DESC
Посмотрим на результат:
Смотрим журнал Windows Firewall.
Разумеется, с полученной таблицей можно делать все что угодно ― сортировать, группировать. Насколько хватит фантазии и знания SQL.
Log Parser также прекрасно работает с множеством других источников. Например, посмотрим откуда пользователи подключались к нашему серверу по RDP.
Работать будем с журналом TerminalServices-LocalSessionManager\Operational.
Не со всеми журналами Log Parser работает просто так ― к некоторым он не может получить доступ. В нашем случае просто скопируем журнал из %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx в %temp%\test.evtx.
Данные будем получать таким запросом:
SELECT
timegenerated as Date,
extract_token(strings, 0, '|') as user,
extract_token(strings, 2, '|') as sourceip
FROM '%temp%\test.evtx'
WHERE EventID = 21
ORDER BY Date DESC
Смотрим, кто и когда подключался к нашему серверу терминалов.
Особенно удобно использовать Log Parser для работы с большим количеством файлов журналов ― например, в IIS или Exchange. Благодаря возможностям SQL можно получать самую разную аналитическую информацию, вплоть до статистики версий IOS и Android, которые подключаются к вашему серверу.
В качестве примера посмотрим статистику количества писем по дням таким запросом:
SELECT
TO_LOCALTIME(TO_TIMESTAMP(EXTRACT_PREFIX(TO_STRING([#Fields: date-time]),0,'T'), 'yyyy-MM-dd')) AS Date,
COUNT(*) AS [Daily Email Traffic]
FROM 'C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\MessageTracking\*.LOG'
WHERE (event-id='RECEIVE') GROUP BY Date ORDER BY Date ASC
Если в системе установлены Office Web Components, загрузить которые можно в Центре загрузки Microsoft, то на выходе можно получить красивую диаграмму.
Выполняем запрос и открываем получившуюся картинку…
Любуемся результатом.
Следует отметить, что после установки Log Parser в системе регистрируется COM-компонент MSUtil.LogQuery. Он позволяет делать запросы к движку утилиты не только через вызов LogParser.exe, но и при помощи любого другого привычного языка. В качестве примера приведу простой скрипт PowerShell, который выведет 20 наиболее объемных файлов на диске С.
$LogQuery = New-Object -ComObject "MSUtil.LogQuery"
$InputFormat = New-Object -ComObject "MSUtil.LogQuery.FileSystemInputFormat"
$InputFormat.Recurse = -1
$OutputFormat = New-Object -ComObject "MSUtil.LogQuery.CSVOutputFormat"
$SQLQuery = "SELECT Top 20 Path, Size INTO '%temp%\output.csv' FROM 'C:\*.*' ORDER BY Size DESC"
$LogQuery.ExecuteBatch($SQLQuery, $InputFormat, $OutputFormat)
$CSV = Import-Csv $env:TEMP'\output.csv'
$CSV | fl
Remove-Item $env:TEMP'\output.csv'
$LogQuery=$null
$InputFormat=$null
$OutputFormat=$null
Ознакомиться с документацией о работе компонента можно в материале Log Parser COM API Overview на портале SystemManager.ru.
Благодаря этой возможности для облегчения работы существует несколько утилит, представляющих из себя графическую оболочку для Log Parser. Платные рассматривать не буду, а вот бесплатную Log Parser Studio покажу.
Интерфейс Log Parser Studio.
Основной особенностью здесь является библиотека, которая позволяет держать все запросы в одном месте, без россыпи по папкам. Также сходу представлено множество готовых примеров, которые помогут разобраться с запросами.
Вторая особенность ― возможность экспорта запроса в скрипт PowerShell.
В качестве примера посмотрим, как будет работать выборка ящиков, отправляющих больше всего писем:
Выборка наиболее активных ящиков.
При этом можно выбрать куда больше типов журналов. Например, в «чистом» Log Parser существуют ограничения по типам входных данных, и отдельного типа для Exchange нет ― нужно самостоятельно вводить описания полей и пропуск заголовков. В Log Parser Studio нужные форматы уже готовы к использованию.
Помимо Log Parser, с логами можно работать и при помощи возможностей MS Excel, которые упоминались в материале «Excel вместо PowerShell». Но максимального удобства можно достичь, подготавливая первичный материал при помощи Log Parser с последующей обработкой его через Power Query в Excel.
Приходилось ли вам использовать какие-либо инструменты для перелопачивания логов? Поделитесь в комментариях.
on August 15, 2010
We can open event viewer console from command prompt or from Run window by running the command eventvwr. To retrieve the events information from log files in command line we can use eventquery.vbs. This file can be found in the directory C:\Windows\System32.
Using eventquery.vbs we can dump the events selectively based on various parameters. These parameters include event source, event id, event date, event type(information, error , warning), event log file name(system, application, security, IE etc). Below are few examples on how to use this script file.
To list all the events that are created by a particular service/application.
cscript eventquery.vbs /FI "source eq source_name"
For example to list all the events that are created by DHCP you can run the below command.
cscript eventquery.vbs /FI "source eq dhcp"
To list all the events originated from Outlook:
cscript eventquery.vbs /FI "source eq outlook"
To list the events with a specific id.
cscript eventquery.vbs /FI "id eq id_number"
To list application events that have occurred after a specific time
cscript.exe eventquery.vbs /FI "DateTime gt 11/13/2010,01:00:00AM"
To print all warning events from application log file:
cscript eventquery.vbs /L application /FI "type eq warning"
To dump all the error events generated by a particular user:
cscript eventquery.vbs /FI "user eq domainname\username" /FI "type eq error"
This script is not supported in Windows 7.
Introduction:
Windows Event Viewer log messages can be queried using the command line. This process is slightly different depending on which version of Windows you are using.
Requirements:
Access to the Windows command line and filesystem.
Procedure:
On Windows OS’s pre-Windows Vista:
Open the command line and browse to the directory containing the eventquery.vbs script:
cd C:\WINDOWS\system32
Then, you can specify which log you are trying to work with. For example, if you are using the Application log, you can use the Application argument.
cscript eventquery.vbs /L Application /V
You can further refine your search by including a search pattern. This can be done by piping the output of the query to the findstr command which will be able to pattern match the output. For instance, if you want to find the string “Performance counters for the WmiApRpl” in the output of the Application log, you can use:
cscript eventquery.vbs /L Application /V | findstr /C:"Performance counters for the WmiApRpl"
If you want to specify the level of the event, such as “Information,” you can include:
cscript eventquery.vbs /L Application /V /FI "Type eq Information"| findstr /C:"Performance counters for the WmiApRpl"
On Windows Vista or later:
Once you have determined which log you would like to query, type something such as:
wevtutil qe System
This will query the System log. If you have an archived .evt log file, you can find the text “license found” using:
wevtutil qe "C:\Directory\SubDirectory\logFile.evt" /lf:true | findstr /C:"license found"
If you want to restrict searches to only include a certain event level, you can query for them using their level number. Level 4 is Information, 3 is Warning, 2 is Error, and 1 is Critical.
More Information:
For more information, type:
cscript eventquery.vbs /?
on Windows OS’s pre-Windows Vista, or
wevtutil /?
for Windows Vista or later.
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно использовать при подключении через командную строку или в ваших сценариях.
Для просмотра и изучения событий Windows Events на локальном компьютере, вы можете воспользоваться утилитой командной строки Wevtutil.
Утилита может быть полезна, если вы управляете компьютером с Windows 2008 и ролью Server Core из командной строки. Она также может быть полезной, если вы хотите, использовать сценарий настройки журналов событий или экспортировать журналы для архивных целей. Вот некоторые из вещей, которые вы произвести с помощью Wevtutil:
Чтобы получить список имен всех журналов событий в системе, используйте el (enum-logs) с Wevtutil следующим образом:
wevtutil el
Вы можете просмотреть конфигурации журнала событий, таких, как максимальный размер файла журнала, с помощью параметра gl (get-log). Например, для просмотра конфигурации журнала приложений, выполните следующие действия:
wevtutil gl Application
Ниже представлен вывод данной программы:
name: Application
enabled: true
type: Admin
owningPublisher:
isolation: Application
channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)
logging:
logFileName: %SystemRoot%\System32\Winevt\Logs\Application.evtx
retention: false
autoBackup: false
maxSize: 20971520
publishing:
Вы можете изменить конфигурацию файлов журналов. Например, чтобы увеличить максимальный размер журнала приложений на 100 мегабайт (МБ) и включить ротацию логов, чтобы освободить место для новых событий, когда журнал заполняется, и автоматически создавать резервные копии журналов, когда он становится заполненным, введите:
wevtutil sl Application /ms:104857600 /rt:true /ab:true
Вы можете фильтровать журнале событий по определенному событий или по типу события, используя параметр qe (query-events). Например, для отображения последних двух события в системном журнале в формате обычного текста, используйте параметр /rd, а чтобы задать направление вывода используйте атрибут True (то есть самые последние события возвращаются первыми) воспользуйтесь следующей командой:
wevtutil qe System /c:2 /rd:true /f:text wevtutil
Для просмотра последних критических событий (уровень = 1) или ошибок (уровень = 2) в журнале Task Scheduler, используйте параметр /q следующим образом:
wevtutil qe Microsoft-Windows-TaskScheduler/Operational «/q:*[System[(Level=1 or Level=2)]]» /c:1 /rd:true /f:text
Это был краткий обзор утилиты Wevtutil, более подробно про нее можно почитать тут http://technet.microsoft.com/ru-ru/library/cc732848%28WS.10%29.aspx . Надеюсь, эта статья будет полезной.
Содержание
- Как управлять журналами событий из командной строки
- Записки IT специалиста
- Linux
- Windows
- Как посмотреть логи Windows?
- Просмотр событий для проверки логов.
- Фильтрация событий.
- Просмотр PowerShell логов.
- Вертим логи как хотим ― анализ журналов в системах Windows
- Журналы и командная строка
- Работаем с журналами посредством запросов SQL
- Лог командной строки windows
Как управлять журналами событий из командной строки
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно использовать при подключении через командную строку или в ваших сценариях.
Для просмотра и изучения событий Windows Events на локальном компьютере, вы можете воспользоваться утилитой командной строки Wevtutil.
Утилита может быть полезна, если вы управляете компьютером с Windows 2008 и ролью Server Core из командной строки. Она также может быть полезной, если вы хотите, использовать сценарий настройки журналов событий или экспортировать журналы для архивных целей. Вот некоторые из вещей, которые вы произвести с помощью Wevtutil:
Чтобы получить список имен всех журналов событий в системе, используйте el (enum-logs) с Wevtutil следующим образом:
wevtutil el
Вы можете просмотреть конфигурации журнала событий, таких, как максимальный размер файла журнала, с помощью параметра gl (get-log). Например, для просмотра конфигурации журнала приложений, выполните следующие действия:
wevtutil gl Application
Ниже представлен вывод данной программы:
Вы можете изменить конфигурацию файлов журналов. Например, чтобы увеличить максимальный размер журнала приложений на 100 мегабайт (МБ) и включить ротацию логов, чтобы освободить место для новых событий, когда журнал заполняется, и автоматически создавать резервные копии журналов, когда он становится заполненным, введите:
wevtutil sl Application /ms:104857600 /rt:true /ab:true
Вы можете фильтровать журнале событий по определенному событий или по типу события, используя параметр qe (query-events). Например, для отображения последних двух события в системном журнале в формате обычного текста, используйте параметр /rd, а чтобы задать направление вывода используйте атрибут True (то есть самые последние события возвращаются первыми) воспользуйтесь следующей командой:
wevtutil qe System /c:2 /rd:true /f:text wevtutil
Для просмотра последних критических событий (уровень = 1) или ошибок (уровень = 2) в журнале Task Scheduler, используйте параметр /q следующим образом:
wevtutil qe Microsoft-Windows-TaskScheduler/Operational «/q:*[System[(Level=1 or Level=2)]]» /c:1 /rd:true /f:text
Источник
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Linux
После чего вы сразу увидите на экране 10 последних строк лог-файла и все добавляемые позже в режиме реального времени.
Это удобно, теперь мы можем в одном окне выполнять какие-либо действия, а во втором сразу видеть реакцию на них.
А тем временем сделать правильно очень просто. Достаточно использовать приведенную выше команду и направить ее вывод в файл:
На экране теперь строки лога появляться не будут, они будут записаны в файл my_log.log в домашней директории. После чего выполните с системой необходимые действия, результат которых должен попасть в лог, прервите действие команды по Ctrl+C и можете смело описывать проблему коллегам, не забыв приложить полученный файл.
Также вы можете использовать другие утилиты для обработки результатов вывода, допустим вам нужно убрать из лога сообщения, относящиеся к другим узлам сети и оставить только собственные. Так как в нашем логе фиксируется IP источника можно очень просто отфильтровать записи:
Здесь мы перенаправили выходной поток от tail на вход команды grep, которая выберет только те строки, в которых присутствует искомый адрес. Подобную конструкцию можно использовать и при интерактивном выводе на экран.
Windows
Системные логи Windows хранятся в Журналах событий, которые имеют специализированный формат и хранятся в файлах .evt и .evtx, которые просмотреть подобным образом не удастся, но логи многих системных служб и приложений используют простой текстовый формат, а следовательно дают возможность работать с ними интерактивно.
В качестве аналога команды tail используем один из командлетов PowerShell:
Данная команда выведет на экран весь лог и продолжит отображать новые строки. Если лог большой, то это может быть неудобно, поэтому добавим в команду еще один параметр, в котором укажем какое количество последних строк мы хотим видеть, допустим пять:
Точно также мы можем перенаправить вывод команды в файл:
Или выполнить отбор по интересующему нас вхождению используя возможности РowerShell, например отберем только события AUTH_FAILED, включив в отбор также последние сто строк лога:
В данной заметке мы не претендовали на всестороннее освещение затронутой темы, а всего лишь хотели напомнить о существовании удобных инструментов для интерактивной работы с текстовыми логами. Надеемся данный материал окажется вам полезен.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Источник
Как посмотреть логи Windows?
Ищете сервер с Windows? Выбирайте наши Windows VDS
Просмотр событий для проверки логов.
После нажатия комбинации “ Win+R и введите eventvwr.msc ” в любой системе Виндовс вы попадаете в просмотр событий. У вас откроется окно, где нужно развернуть Журналы Windows. В данном окне можно просмотреть все программы, которые открывались на ОС и, если была допущена ошибка, она также отобразится.
Аудит журнал поможет понять, что и кто и когда делал. Также отображается информация по запросам получения доступов.
В пункте Установка можно посмотреть логи ОС Виндовс, например, программы и обновления системы.
Фильтрация событий.
С помощью Фильтра текущего журнала (раздел Действия) можно отфильтровать информацию, которую вы хотите просмотреть.
Обязательно нужно указать уровень Событий:
Для сужения поиска можно отфильтровать источник событий и код.
Просмотр PowerShell логов.
В результате вы получите логи Системы
Также обязательно ознакомьтесь с перечнем аббревиатур:
Для выведения событий в командной оболочке только со столбцами «Уровень», «Дата записи события», «Источник», «Код события», «Категория» и «Сообщение события» для журнала «Система» используйте:
Get-EventLog –LogName ‘System’ | Format-Table EntryType, TimeWritten, Source, EventID, Category, Message
Если нужна подробная информация, замените Format-Table на Format-List на
Get-EventLog –LogName ‘System’ | Format-List EntryType, TimeWritten, Source, EventID, Category, Message
Формат информации станет более легким
Для фильтрации журнала, например, для фильтрации последних 20 сообщений, используйте команду
Get-EventLog –Logname ‘System’ –Newest 20
Если нужен список, позднее даты 1 января 2018 года, команда
Get-EventLog –LogName ‘System’ –After ‘1 января 2018’
Надеемся, данная статья поможет вам быстро и просто читать логи ОС Windows.
Желаем приятной работы!
Как установить свой образ на ВДС сервер с Виндовс, читайте в предыдущей статье.
Источник
Вертим логи как хотим ― анализ журналов в системах Windows
Пора поговорить про удобную работу с логами, тем более что в Windows есть масса неочевидных инструментов для этого. Например, Log Parser, который порой просто незаменим.
В статье не будет про серьезные вещи вроде Splunk и ELK (Elasticsearch + Logstash + Kibana). Сфокусируемся на простом и бесплатном.
Журналы и командная строка
До появления PowerShell можно было использовать такие утилиты cmd как find и findstr. Они вполне подходят для простой автоматизации. Например, когда мне понадобилось отлавливать ошибки в обмене 1С 7.7 я использовал в скриптах обмена простую команду:
Она позволяла получить в файле fail.txt все ошибки обмена. Но если было нужно что-то большее, вроде получения информации о предшествующей ошибке, то приходилось создавать монструозные скрипты с циклами for или использовать сторонние утилиты. По счастью, с появлением PowerShell эти проблемы ушли в прошлое.
Основным инструментом для работы с текстовыми журналами является командлет Get-Content, предназначенный для отображения содержимого текстового файла. Например, для вывода журнала сервиса WSUS в консоль можно использовать команду:
Для вывода последних строк журнала существует параметр Tail, который в паре с параметром Wait позволит смотреть за журналом в режиме онлайн. Посмотрим, как идет обновление системы командой:
Смотрим за ходом обновления Windows.
Если же нам нужно отловить в журналах определенные события, то поможет командлет Select-String, который позволяет отобразить только строки, подходящие под маску поиска. Посмотрим на последние блокировки Windows Firewall:
Смотрим, кто пытается пролезть на наш дедик.
При необходимости посмотреть в журнале строки перед и после нужной, можно использовать параметр Context. Например, для вывода трех строк после и трех строк перед ошибкой можно использовать команду:
Оба полезных командлета можно объединить. Например, для вывода строк с 45 по 75 из netlogon.log поможет команда:
Для получения списка доступных системных журналов можно выполнить следующую команду:
Вывод доступных журналов и информации о них.
Для просмотра какого-то конкретного журнала нужно лишь добавить его имя. Для примера получим последние 20 записей из журнала System командой:
Последние записи в журнале System.
Для получения определенных событий удобнее всего использовать хэш-таблицы. Подробнее о работе с хэш-таблицами в PowerShell можно прочитать в материале Technet about_Hash_Tables.
Для примера получим все события из журнала System с кодом события 1 и 6013.
В случае если надо получить события определенного типа ― предупреждения или ошибки, ― нужно использовать фильтр по важности (Level). Возможны следующие значения:
Собрать хэш-таблицу с несколькими значениями важности одной командой так просто не получится. Если мы хотим получить ошибки и предупреждения из системного журнала, можно воспользоваться дополнительной фильтрацией при помощи Where-Object:
Ошибки и предупреждения журнала System.
Аналогичным образом можно собирать таблицу, фильтруя непосредственно по тексту события и по времени.
Подробнее почитать про работу обоих командлетов для работы с системными журналами можно в документации PowerShell:
PowerShell ― механизм удобный и гибкий, но требует знания синтаксиса и для сложных условий и обработки большого количества файлов потребует написания полноценных скриптов. Но есть вариант обойтись всего-лишь SQL-запросами при помощи замечательного Log Parser.
Работаем с журналами посредством запросов SQL
Утилита Log Parser появилась на свет в начале «нулевых» и с тех пор успела обзавестись официальной графической оболочкой. Тем не менее актуальности своей она не потеряла и до сих пор остается для меня одним из самых любимых инструментов для анализа логов. Загрузить утилиту можно в Центре Загрузок Microsoft, графический интерфейс к ней ― в галерее Technet. О графическом интерфейсе чуть позже, начнем с самой утилиты.
О возможностях Log Parser уже рассказывалось в материале «LogParser — привычный взгляд на непривычные вещи», поэтому я начну с конкретных примеров.
Для начала разберемся с текстовыми файлами ― например, получим список подключений по RDP, заблокированных нашим фаерволом. Для получения такой информации вполне подойдет следующий SQL-запрос:
Посмотрим на результат:
Смотрим журнал Windows Firewall.
Разумеется, с полученной таблицей можно делать все что угодно ― сортировать, группировать. Насколько хватит фантазии и знания SQL.
Log Parser также прекрасно работает с множеством других источников. Например, посмотрим откуда пользователи подключались к нашему серверу по RDP.
Работать будем с журналом TerminalServices-LocalSessionManager\Operational.
Не со всеми журналами Log Parser работает просто так ― к некоторым он не может получить доступ. В нашем случае просто скопируем журнал из %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx в %temp%\test.evtx.
Данные будем получать таким запросом:
Смотрим, кто и когда подключался к нашему серверу терминалов.
Особенно удобно использовать Log Parser для работы с большим количеством файлов журналов ― например, в IIS или Exchange. Благодаря возможностям SQL можно получать самую разную аналитическую информацию, вплоть до статистики версий IOS и Android, которые подключаются к вашему серверу.
В качестве примера посмотрим статистику количества писем по дням таким запросом:
Если в системе установлены Office Web Components, загрузить которые можно в Центре загрузки Microsoft, то на выходе можно получить красивую диаграмму.
Выполняем запрос и открываем получившуюся картинку…
Любуемся результатом.
Следует отметить, что после установки Log Parser в системе регистрируется COM-компонент MSUtil.LogQuery. Он позволяет делать запросы к движку утилиты не только через вызов LogParser.exe, но и при помощи любого другого привычного языка. В качестве примера приведу простой скрипт PowerShell, который выведет 20 наиболее объемных файлов на диске С.
Ознакомиться с документацией о работе компонента можно в материале Log Parser COM API Overview на портале SystemManager.ru.
Благодаря этой возможности для облегчения работы существует несколько утилит, представляющих из себя графическую оболочку для Log Parser. Платные рассматривать не буду, а вот бесплатную Log Parser Studio покажу.
Интерфейс Log Parser Studio.
Основной особенностью здесь является библиотека, которая позволяет держать все запросы в одном месте, без россыпи по папкам. Также сходу представлено множество готовых примеров, которые помогут разобраться с запросами.
Вторая особенность ― возможность экспорта запроса в скрипт PowerShell.
В качестве примера посмотрим, как будет работать выборка ящиков, отправляющих больше всего писем:
Выборка наиболее активных ящиков.
При этом можно выбрать куда больше типов журналов. Например, в «чистом» Log Parser существуют ограничения по типам входных данных, и отдельного типа для Exchange нет ― нужно самостоятельно вводить описания полей и пропуск заголовков. В Log Parser Studio нужные форматы уже готовы к использованию.
Помимо Log Parser, с логами можно работать и при помощи возможностей MS Excel, которые упоминались в материале «Excel вместо PowerShell». Но максимального удобства можно достичь, подготавливая первичный материал при помощи Log Parser с последующей обработкой его через Power Query в Excel.
Приходилось ли вам использовать какие-либо инструменты для перелопачивания логов? Поделитесь в комментариях.
Источник
Лог командной строки windows
Сообщения: 124
Благодарности: 11
alpap, Приветствую, циферки с датами я сам раставлю где нужно, код думаю врятли Вам о чем нибудь скажет, эксперементирую с созданием сборок в автоматическом режиме, часто вношу изменения в скрипт, проверяю что будет, вообщем было бы очень удобно если бы все писалось не только на экране но и в лог, говорят в линухе это легко реализуется всего одной командой, неужели в cmd или на худой конец в PowerShell не придумано ничего похожего?
-11,8%
rem Создаем папку для будуещего wim файла, который будем изменять
rd /s /q %
rem Копируем оригинальный wim во вновь созданую папку
copy E:\cd-roms\OS\cur\64\install.wim %
rem Создаем папку для монтирования
md %
-11,8%
rem Монтируем оргинал для изменения в Dism++ и NtLite
Dism /Mount-Wim /WimFile:%
dp0OS\64\orig\install.wim /index:1 /MountDir:%
-11,8%
rem Насилуем оригинальный образ в дисм
start /wait %
-11,8%
rem Добавляем в автозагрузку скрипт для начала установки софта и настроек после выхода на раб стол
reg load HKLM\start %
dp0mount\users\Default\NTUSER.DAT
reg add HKEY_LOCAL_MACHINE\start\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v «Start» /d «d:\w10Home.cmd» /f
reg unload HKLM\start
rem Добавляем ассоциации файлам
Dism.exe /Image:%
-11,8%
rem Насилуем оригинальный образ в NtLite
«C:\Program Files\NTLite\NTLite.exe» /loadimage:»%
dp0OS\64\orig\install.wim» /imageindex:1 /loadpreset:»win10″ /exitAfter:1
md %
-11,8%
rem Сохраняем изменения в рар на всякий случай
«C:\program files\winrar\rar.exe» a «%
-11,8%
rem Очищаем папку виртуальной машины
rd /s /q %
rem Распаковываем пердварительно подготовленную папку с чистой виртуальной машиной для работы с ней
«c:\program files\winrar\rar.exe» x %
rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:
rem Монтируем чистый виртуальный носитель на хост
vmount attach %
-11,8%
rem Применяем к нему измененый в дисм++ и нтлайт образ
dism /Apply-Image /Imagefile:%
dp0Install\boot.wim /index:1 /ApplyDir:F:\
dism /Apply-Image /Imagefile:%
dp0OS\64\orig\install.wim /index:1 /ApplyDir:G:\
rem Добавляем файл ответов, чтобы сразу перейти в режим аудита после развертывания и начать установку софта
md G:\Windows\Panther\
copy %
rem Демонтируем виртуальный носитель с образом
vmount detach %
rem Переносим cd с софтом и настройками в рабочую папку
move %
rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe
rem Переносим cd с софтом обратно в хранилище
move %
-11,8%
rem Сохраняем хомку без обновлений и сиспреп в rar для последующей доустановки Office, обновлений и т.п.
del «%
dp0imageVB\10x64Homewim.rar»
«C:\program files\winrar\rar.exe» a «%
rem Переносим cd с апдэйтами в рабочую папку
move %
rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe
rem Переносим cd с апдэйтами обратно в хранилище
move %
-11,8%
rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:
rem Присоединяем виртуальный диск
vmount attach %
rem Создаем папку для будущего wim файла, с настроенной Home
md %
-11,8%
rem Заливаем в wim настроенную Home
Dism /Capture-Image /ImageFile:%
dp0OS\64\Home\install.wim /CaptureDir:G:\ /Name:»Windows 10 Home x64″ /Description:»Windows 10 Home x64″
rem Отсоединяем виртуальный диск
vmount detach %
rem создаем папку для монтирования (на всякий случай)
md %
-11,8%
rem Запускаем повышение редакции до Pro
DISM /Export-Image /SourceImageFile:%
dp0OS\64\Home\install.wim /SourceIndex:1 /DestinationImageFile:%
dp0OS\64\Home\install.wim /DestinationName:»Windows 10 Pro x64″
DISM /Mount-Image /ImageFile:%
dp0OS\64\Home\install.wim /Index:2 /MountDir:%
dp0mount
DISM /Image:%
dp0mount /Set-Edition:Professional
Dism /Unmount-Wim /MountDir:%
-11,8%
rem Готов образ с двумя редакциями для установки на работу в офис, нет ниодной не лицензионной программы
-11,8%
rem Распаковываем Vb с настроенным Home из рар обратно
rd /s /q %
dp0vb\10×64
«c:\program files\winrar\rar.exe» x «%
rem Переносим cd с Office в рабочую папку
move %
rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe
rem Переносим cd с Office в хранилище
move %
-11,8%
rem Сохраняем в рар Home&Office для последующего обновления сборки
del «%
dp0imageVB\10x64Office.rar»
«C:\program files\winrar\rar.exe» a «%
rem Переносим cd с апдэйтами в рабочую папку
move %
rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe
rem Переносим cd с апдэйтами в хранилище
move %
rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:
rem Присоединяем виртуальный диск
vmount attach %
rem Создаем папку для будущего wim файла, с настроенной Home_Office
md %
-11,8%
rem Заливаем в wim настроенную Home_Office
Dism /Capture-Image /ImageFile:%
dp0OS\64\Home_Office\install.wim /CaptureDir:G:\ /Name:»Windows 10 Home_Office x64″ /Description:»Windows 10 Home_Office x64″
rem Отсоединяем виртуальный диск
vmount detach %
rem создаем папку для монтирования (на всякий случай)
md %
-11,8%
rem Запускаем повышение редакции до Pro_Office
DISM /Export-Image /SourceImageFile:%
dp0OS\64\Home_Office\install.wim /SourceIndex:1 /DestinationImageFile:%
dp0OS\64\Home_Office\install.wim /DestinationName:»Windows 10 Pro_Office x64″
DISM /Mount-Image /ImageFile:%
dp0OS\64\Home_Office\install.wim /Index:2 /MountDir:%
dp0mount
DISM /Image:%
dp0mount /Set-Edition:Professional
Dism /Unmount-Wim /MountDir:%
-11,8%
rem Добавляем 3,4 редакции без Office
Dism /Export-Image /DestinationName:»Windows 10 Home x64″ /SourceImageFile:»d:\ForCreate\OS\64\Home\install.wim» /SourceIndex:1 /DestinationImageFile:»d:\ForCreate\OS\64\Home_Office\install.wim»
Dism /Export-Image /DestinationName:»Windows 10 Pro x64″ /SourceImageFile:»d:\ForCreate\OS\64\Home\install.wim» /SourceIndex:2 /DestinationImageFile:»d:\ForCreate\OS\64\Home_Office\install.wim»
» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>
Сообщения: 124
Благодарности: 11
Сообщения: 26990
Благодарности: 7876
хотелось бы что бы выглядело как на экране в окне cmd, там же все отображается как надо, »
Shulzzz, так Вам коллега alpap и пишет, что для приведённых им в примере команд на экране ничего не будет при их корректном исполнении.
почему нельзя сделать такой же лог, ну или не лог, а просто запись cmd экрана в текстовый файл, меня бы вполне устроило »
Потому что нет такого понятия, как «запись cmd экрана».
Вы можете использовать tee.exe из комплекта GnuWin32 (например, отсюда: CoreUtils for Windows). Кроме того, говорят, что аналог tee.exe с какого-то момента включён в комплект Windows 10 (не знаю, не проверял).
» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>
Сообщения: 26990
Благодарности: 7876
Сообщения: 2842
Благодарности: 468
Iska, почему? ему же лог нужен, а не success-story.
Блин а что это за колхоз в батнике? MDT разверни и настраивай сборку. Там тебе и логи полноценные и возможностей больше.