Работа с журналами в PowerShell

После настройки систем и сервисов, роль админа сводится к наблюдению за их правильной работой и отслеживание текущих параметров. Учитывая, что PS изначально ориентирован на Windows и решения разрабатываемые Microsoft, в его состав входят командлеты позволяющие без сторонней помощи получать нужные данные. Целый ряд командлетов *-Eventlog позволяют легко считать записи в журнале событий как на локальной так и удаленной системе. Просмотреть список всех командлетов с указанием их назначения можно командой:

PS> Get-Help *-Eventlog


Например, командлет Show-Eventlog запустит консоль «Просмотр событий» на которой будут показаны события локальной системы:

PS> Show-Eventlog

Соответственно, чтобы сразу подключиться к удаленному компьютеру добавляем параметр «-computername имя_системы«.
Наиболее интересный из всего списка командлет — Get-Eventlog, который получает список событий или сами события. Чтобы вывести список всех журналов, вводим:

PS> Get-Eventlog -List

В результате получим таблицу, в которой будут данные по названию журнала, его текущему и максимальному размеру, и периоду и политики ротации (по мере устаревания, по необходимости).
Смотрим все события безопасности:

PS> Get-Eventlog -logname Security


Список будет естественно достаточно большим. Каждому событию будет дано краткое описание. В PS по-умолчанию вывод команды достаточно краток и в него попадают не все данные. Так сделано специально, ведь количество обрабатываемых данных велико. Поэтому чтобы получить действительно необходимую информацию ее нужно запросить специально. Чтобы увидеть полностью все данные по событию, следует использовать командлет Format-List:

PS> Get-Eventlog Security | Format-List

Для краткости параметр «-logname» можно не использовать. В PowerShell данные легко сортируются и отбираются по нужным критериям. Например, чтобы вывести только последние несколько событий на двух компьютерах, используем параметр «Nevest» с указанием требуемого числа:

PS> Get-Eventlog Security -Nevest 20 -computername localhost, synack.ru

Теперь выведем только события, имеющие определенный статус:

PS> Get-Eventlog Security -Message "*failed*"


Как уже говорилось события можно группировать, выберем 100 последних системных событий и сгрупируем по Id.

PS> Get-Eventlog -logname system -newest 100 | Group-Object eventid

И для примера соберем все данные по успешной регистрации пользователей (события с EventID=4624):

PS> Get-Eventlog Security | Where-Object {$_.EventID -eq 4624}

В PowerShell v.2 появился еще один командлет Get-WinEvent, который в некоторых случаях предоставляет более удобный формат доступа к данным. Получим список провайдеров отвечающие за обновления:

PS> Get-WinEvent -ListProvider *update*
Microsoft-Windows-WindowsUpdateClient {System, Microsoft-Windows-WindowsUpdateClient/Operational}

В зависимости от установленных ролей и компонентов список будет разным, но нас интересует провайдер для Windows Update. Теперь смотрим установленные обновления:

PS> $provider = Get-WinEvent -ListProvider Microsoft-Windows-WindowsUpdateClient
PS> $provider.events | ? {$_.description -match "success"} | select id,description | ft -AutoSize

В итоге мы можем достаточно просто получить любую информацию по состоянию системы. Учитывая, что количество данных в журналах событий может быть достаточно велико, особенно при сборе информации с нескольких систем, при написании скриптов следует задуматься об оптимизации.

Теги:

Понравилась статья? Оставьте комментарий или подпишитесь на RSS рассылку.

Комментарии

Комментариев пока что нет

Оставить комментарий

(required)

(required)