Запись событий в журнал Event Viewer из PowerShell/CMD

Вместо использования текстовых лог файлов в скриптах, можно записывать информации о событиях непосредственно в журналы Event Viewer. В этой статье мы рассмотрим, как записывать логи в журналы событий Windows из скрипта PowerShell или из командной строки.

Для записи информации в журнал событий используется командлет Write-EventLog. Например, что записать информационного событие в журнал Application, выполните:

Write-EventLog -LogName Application -Source "Application" -EntryType Information -EventID 1 -Message "PS1 Script started"

Можно добавить отдельный источник событий в существующий журнал:

New-EventLog -LogName Application -Source "MyScripts"

Теперь можно записывать события с собственным источником:

Write-EventLog -LogName Application -Source "MyScripts" -EntryType Warning –EventID 1 –Message "PS1 Script started"

Откройте консоль журнала событий ( eventvwr.msc ), разверните журнал Application и проверьте, что новое событие с вашим описанием было добавлено в лог.

Write-EventLog - записать событие в Event Viewer из PowerShell

В качестве типа события в EntryType можно указывать Error, Information, FailureAudit, SuccessAudit или Warning.

Если вы хотите добавить в журнал событие из BAT/CMD скрипта, нужно использовать команду eventcreate:

eventcreate /t information /l application /id 1 /d "BAT script started"

eventcreate - записать событие в журнал событий из командной строки

Можно создать для ваших логов отдельный журнал событий. Его можно создать с помощью команды New-EventLog.

New-EventLog -LogName CustomPSLog -source 'MyScripts','Function1','Function2','Function3'

Если вы пишете события в собственный журнал, то в скрипте перед созданием нового журнала нужно проверять, не создан ли он:

If ([System.Diagnostics.EventLog]::SourceExists(‘CustomPSLog’) -eq $False) {
New-EventLog -LogName CustomPSLog -Source ….
}

Чтобы новый журнал появится в графической консоли Event Viewer, в него нужно отправить хотя бы одно событие:

Write-EventLog -LogName CustomPSLog -Source MyScripts -EntryType Information -EventID 1 -Message "Test"

Новый журнал появится в корне раздела Applications and Services Logs. Для файла журнала будет создан новый EVTX файл в папке %SystemRoot%\System32\Winevt\Logs .

Создать новый журнал событий в Event Viewer

См. как настроить максимальный размер и другие параметры журнала событий Windows.

Для поиска и фильтрации событий в журналах Event Viewer используется командлет Get-WinEvent. Вывести список последних событий в вашем журнале:

Get-WinEvent -FilterHashtable @{logname='CustomPSLog';id=1}|ft TimeCreated,Id,Message | Select-Object -First 5

Фильтрация событий в Event Viewer через Get-WinEvent

Командлет Write-EventLog не поддерживается в новых версиях PowerShell Core. При запуске команды с ним появится ошибка:

Write-EventLog: The term 'Write-EventLog' is not recognized as a name of a cmdlet, function, script file, or executable program.

Вместо него в PowerShell Core 7.x нужно использовать New-WinEvent. Однако для его использования нужно регистрировать отдельный провайдер, что может вызвать затруднения. Гораздо проще в скриптах PowerShell Core сначала импортировать модуль Microsoft.PowerShell.Management с опцией -UseWindowsPowerShell. После этого в скрипте PowerShellCore можно использовать командлет Write-EventLog:

Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
Write-EventLog -LogName CustomPSLog1 -Source CustomPSLog -EntryType Information -EventID 1 -Message "Test2"

Для записи в журналы событий Windows с помощью командлета Write-EventLog нужны права администратора. Под пользователем без прав администратора можно записать события только в кастомные журналы Event Viewer, созданные администратором.


Предыдущая статья Следующая статья


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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)