- Блог системного администратора Windows/Linux/FreeBSD
- Просмотр логов Windows на удаленном компьютере с помощью Powershell
- Примеры использования Get-Eventlog:
- Примеры использования Get-Winevent:
- Работа с журналами в PowerShell
- sergey vasin
- The IT blog
- Создание и использование нового журнала событий при помощи PowerShell – Hey, Scripting Guy! Blog
- Использование PowerShell для создания нового журнала событий
- Создаем журнал событий
- Конфигурируем новый журнал событий
- Я не могу обратиться к пустому журналу событий
- Запись в журнал событий
Блог системного администратора Windows/Linux/FreeBSD
Просмотр логов Windows на удаленном компьютере с помощью Powershell
Для просмотра логов Windows можно использовать команды Get-WinEvent и Get-EventLog
Get-EventLog получает список журналов или событий в заданном журнале на локальном или удалённом компьютере. Указывая нужные параметры для Get-EventLog, можно с лёгкостью искать искомые события по значениям их свойств. Get-EventLog возвращает события, соответствующие всем указанным значениям свойств. Командлет Get-EventLog работает только со стандартными классическими журналами событий Windows. Если нужно искать по остальным событиям из журналов Windows, используйте командлет Get-WinEvent.
Представим, что вам нужна основная информация о журналах событий на вашем компьютере. В этом случае убедитесь, что вы включили параметр list при вызове Get-EventLog:
Если вам нужна только информация о конкретном журнале событий, используйте командлет Where-Object, чтобы ограничить извлечение данных конкретным журналом событий:
Эта команда извлекает все события в журнале событий системы:
После выполнения команды выше на экран будет выведено слишком много данных. Используйте параметр -Newest и верните только нужное количество последних событий, записанных в журнале. Например, эта команда извлекает последние 10 событий, записанные в журнал событий системы:
Вот данные, которые вы получите:
Чтобы получить более подробную информацию, просто добавьте командлет Format-List:
Полученная информация будет уже такой:
Вы также можете передавать данные через командлет Where-Object для возврата подмножества событий. Например, эта команда извлекает только те события в журнале событий Windows PowerShell, у которых значение EventID равно 403:
Вот небольшая команда, которая извлекает все события в журнале событий Windows PowerShell, а затем использует командлет Group-Object для группировки этих событий с помощью EventID. Другими словами, команда подсчитывает общее количество событий для каждого идентификатора (например, произошло два события с EventID 300, произошло шесть событий с событием EventID 400 и т. Д.). Затем эти данные передаются через командлет Sort-Object для предоставления результатов, отсортированных по EventID. Вот команда:
Примеры использования Get-Eventlog:
Поиск событий по ID после 3 июля:
Поиск в логах нескольких серверов:
Возвращает все события журнала Windows PowerShell, в сообщениях которых содержится слово «failed»:
Поиск событий, статус которых «Ошибка»:
Командлет Get-WinEvent берёт данные из журналов событий, а именно — стандартные журналы событий, события приложений и системы. Если вызвать команду Get-WinEvent без параметров, то будут показаны все события из журналов событий компьютера. Для прерывания выполнения команды нажмите сочетание клавиш CTRL+C. Стоит отметить то, что Get-WinEvent работает только в Windows Vista, Windows Server 2008 R2 и старше. Также потребуется установленная платформа Microsoft .NET Framework 3.5 или новее.
Примеры использования Get-Winevent:
Поиск в логе System по ID 6005:
Поиск событий за последние 40 дней:
Поиск событий за последние 5 дней для Outlook:
Поиск в логах нескольких серверов:
Работа с журналами в PowerShell
После настройки систем и сервисов, роль админа сводится к наблюдению за их правильной работой и отслеживание текущих параметров. Учитывая, что PS изначально ориентирован на Windows и решения разрабатываемые Microsoft, в его состав входят командлеты позволяющие без сторонней помощи получать нужные данные. Целый ряд командлетов *-Eventlog позволяют легко считать записи в журнале событий как на локальной так и удаленной системе. Просмотреть список всех командлетов с указанием их назначения можно командой:
PS> Get-Help *-Eventlog
Например, командлет 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
В PowerShell v.2 появился еще один командлет Get-WinEvent, который в некоторых случаях предоставляет более удобный формат доступа к данным. Получим список провайдеров отвечающие за обновления:
PS> Get-WinEvent -ListProvider *update* Microsoft-Windows-WindowsUpdateClient
В зависимости от установленных ролей и компонентов список будет разным, но нас интересует провайдер для Windows Update. Теперь смотрим установленные обновления:
PS> $provider = Get-WinEvent -ListProvider Microsoft-Windows-WindowsUpdateClient PS> $provider.events | ? <$_.description -match "success">| select id,description | ft -AutoSize
В итоге мы можем достаточно просто получить любую информацию по состоянию системы. Учитывая, что количество данных в журналах событий может быть достаточно велико, особенно при сборе информации с нескольких систем, при написании скриптов следует задуматься об оптимизации.
sergey vasin
The IT blog
Создание и использование нового журнала событий при помощи PowerShell – Hey, Scripting Guy! Blog
Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о создании и использовании нового журнала событий посредством Windows PowerShell.
Использование PowerShell для создания нового журнала событий
Одна из замечательных вещей, которые можно делать с помощью Windows PowerShell – это создание собственного журнала событий. Здесь я говорю о классическом журнале событий (примеры таких журналов – это System, Security и Applcation). Windows PowerShell позволяет свободно читать, записывать, архивировать и очищать такие виды журналов.
Создаем журнал событий
Для создания нового журнала событий я воспользуюсь командлетом New-EventLog. Для этого мне понадобятся три вещи:
1. Открыть консоль Windows PowerShell с административными правами – в противном случае при попытке создания нового журнала будет возвращено сообщение об ошибке.
2. Имя создаваемого журнала.
3. Также мне будет нужно указать источник событий нового журнала.
Следующая команда создает новый классический журнал событий с именем ScriptingGuys и указывает источник событий с именем scripts.
При запуске команды на экран не выводится никакой информации. Чтобы убедиться, что команда отработала должным образом, я воспользуюсь командлетом Get-EventLog с параметром –List.
Конфигурируем новый журнал событий
Одна из вещей, которую я заметил при проверке создания журнала, это то, что его размер установлен в 512 KB, а срок сохранения событий равен 7 дням. Мне же нужно, чтобы размер журнала не превышал 64 KB, и события очищались по мере заполнения журнала. Мне казалось, что для этого подошел бы командлет Set-EventLog, однако командлета с таким именем не оказалось. Нужный командлет – Limit-EventLog. Просматривая файл справки, я заметил, что он обладает только одним набором параметров. Мне нужно установить параметр –OverflowAction в OverWriteAsNeeded, поэтому я предположил, что –RetentionDays нужно установить в 0. Я попробовал запустить следующую команду, но, как видите, появилось сообщение об ошибке.
Тогда я попробовал запустить команду без параметра –RetentionDays, и это сработало.
Теперь я воспользуюсь командлетом Get-EventLog, чтобы убедиться, что изменения внесены. Вывод команды указывает на то, что внесение изменений произошло успешно.
Я не могу обратиться к пустому журналу событий
Довольно интересно, что я не могу обратиться к журналу, не содержащему записей. Я пытаюсь получить содержимое журнала посредством командлета Get-EventLog и получаю следующую ошибку.
Запись в журнал событий
Для записи события, мне понадобится следующая информация:
1. Имя журнала событий (в нашем случае – это ScriptingGuys)
2. Источник события (scripts)
3. EventID (я начну с 1)
4. Тип записи (Information, Warning, Error)
5. Сообщение (то, что я хочу записать)
В следующем примере я добавляю в журнал событий новую запись.
Теперь я снова воспользуюсь командлетом Get-EventLog, чтобы получить только что записанное событие.