- PowerShell позволяет обрабатывать различные типы событий: engine, .NET, WMI и другие.
- Такие командлеты, как Register-ObjectEvent и Get-Event, позволяют работать с событиями в режиме реального времени.
- Задачи можно автоматизировать путем обнаружения таких событий, как завершение процессов, изменение файлов или системных журналов.
- PowerShell позволяет читать, фильтровать и экспортировать события из стандартных и пользовательских журналов. Windows.

Хотите узнать, как эффективно управлять событиями в PowerShell и использовать его возможности для автоматизации задач или обнаружения системной активности? Хотя PowerShell известен как инструмент системного администрирования, его настоящая сила проявляется при использовании в сочетании с событиями. В этой статье мы объясняем ВСЕ, что вам нужно знать об использовании событий с PowerShell, основываясь на официальной документации и специализированных технических статьях.
PowerShell позволяет захватывать, анализировать и реагировать на любые типы событий, от системных журналов до пользовательских событий . Мы рассмотрим как базовые команды , так и сложные примеры с использованием классов .NET Framework. Мы также покажем, как просматривать события, подписываться на них и запускать автоматические действия на основе захваченного события. Давайте начнём.
Типы событий, которые можно обрабатывать в PowerShell
PowerShell способен работать с различными типами событий , каждое из которых имеет свои особенности. Вот основные из них:
- События движка PowerShell: например OnIdle (при отсутствии активности) и Exiting (при закрытии сеанса).
- События объектов .NET Framework: такие как закрытие процессов, изменение файлов и т. д.
- События WMI и CIM: Идеально подходит для более сложных сценариев мониторинга, доступен с версии PowerShell 3.0.
- Пользовательские события: создан с
New-Eventдля обработки определенных контекстов в ваших скриптах.
Просмотр и работа с журналами с помощью PowerShell
Одним из наиболее распространенных способов работы с событиями в PowerShell является запрос журналов событий Windows.. Вы можете получить к ним доступ из графического средства просмотра событий (запустите eventvwr), но PowerShell обеспечивает гораздо более точный контроль с помощью командлетов Get-EventLog y Get-WinEvent. Кроме того, если вы хотите узнать, как обнаружить определенные системные проблемы, вы можете ознакомиться с Эта диагностика просмотра событий в Windows 11.
Базовые запросы с Get-EventLog
Этот командлет полезен для работы с классическими журналами, такими как «Приложения» , «Система» или «Безопасность» . Вот несколько примеров:
- Список всех журналов:
Get-EventLog -List - Получить последние 10 событий:
Get-EventLog -LogName System -Newest 10 - Фильтр по типу:
Get-EventLog -LogName System -EntryType Error - Фильтр по сообщению:
Get-EventLog -LogName System -Message *dominio*
Более сложные запросы с Get-WinEvent
Для современных или индивидуальных журналов, Get-WinEvent Он более мощный. Он принимает фильтры на основе XML, позволяет работать с определенными идентификаторами, такими как 4104 (используется для зарегистрированных скриптов PowerShell), и получать доступ к записям, таким как Microsoft-Windows-PowerShell/Operational.evtx. Если вы хотите узнать больше об управлении журналами и событиями в Hyper-V, ознакомьтесь с Управление журналами и событиями в Hyper-V.
Например, чтобы извлечь все фрагменты выполненного скрипта (событие 4104 с тем же идентификатором ScriptBlock):
$StoreArrayHere = Get-WinEvent -FilterHashtable @{ Path="C:\SampleEVTX\Microsoft-Windows-PowerShell%4Operational.evtx"; ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 } | Where-Object { $_.Message -like '*51baf005*' }
Вы можете отсортировать фрагменты и собрать их воедино, чтобы восстановить полный скрипт . Это ключевой метод в криминалистическом анализе и кибербезопасности . Для получения более подробной информации об обнаружении вредоносного ПО с помощью журналов см. раздел «Типы вредоносного ПО».
Создание и подписка на пользовательские события
PowerShell позволяет вам создавать пользовательские события с помощью New-Event. Это полезно для генерации внутренних событий в сложных скриптах. Вы можете подписаться на них, используя Register-EngineEvent.
пример:
Register-EngineEvent -SourceIdentifier MyEvent -Action { Write-Host "Se ha producido el evento personalizado" }
New-Event -SourceIdentifier MyEvent -MessageData "Algo pasó"
Вы также можете просматривать события в активной очереди с помощью Get-Event и устранить их с помощью Remove-EventДля более расширенного управления ознакомьтесь с Переопределить брандмауэр в Windows.
Подпишитесь на события .NET Framework
В лице Register-ObjectEvent Вы можете реагировать на события из объектов .NETНапример, вы можете определить момент закрытия приложения, создания файла или внесения нового журнала в систему.
Пример с процессом калькулятора
$calc = ::Start("calc.exe")
Register-ObjectEvent -InputObject $calc -EventName Exited -Action {
Write-Host "La calculadora se cerró"
}
Пример с FileSystemWatcher
$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = "C:\Users\Public"
Register-ObjectEvent -InputObject $fsw -EventName Created -Action { Write-Host "Archivo nuevo detectado" }
Пример с System.Diagnostics.EventLog
$log = New-Object System.Diagnostics.EventLog
$log.Log = "Security"
Register-ObjectEvent -InputObject $log -EventName EntryWritten -Action { Write-Host "Evento de seguridad escrito" }
В этих случаях при каждом возникновении отслеживаемого события блок действий будет выполняться автоматически.
События движка PowerShell
Их немного, но они полезны для автоматизации распространенных задач:
- PowerShell.OnIdle: Активируется при отсутствии активности.
- PowerShell.Выход: Запускается при закрытии консоли.
Например, чтобы сохранить историю команд:
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml "$home\ps_history.xml"
}
Этот скрипт можно включить в ваш профиль PowerShell, и при запуске нового сеанса вы сможете получить историю с помощью:
If (Test-Path "$home\ps_history.xml") {
Add-History -InputObject (Import-Clixml "$home\ps_history.xml")
}
Просмотр и управление подписками
Все активные события и подписки в сеансе можно просмотреть с помощью: Get-EventSubscriberЧтобы отменить их, просто используйте Unregister-Event.
Например:
Get-EventSubscriber | Unregister-Event
Вы также можете использовать параметр -Force если какая-либо подписка не видна напрямую.
Автоматизация с фоновыми или удаленными событиями
PowerShell поддерживает пересылку событий из фоновых или удаленных сеансов.. Это достигается с помощью параметра -Forward в командлетах подписки.
Пример с фоновым заданием:
Start-Job -ScriptBlock {
Register-EngineEvent -SourceIdentifier JobEvent -Forward
New-Event -SourceIdentifier JobEvent -Message "Trabajo terminado"
}
Основная сессия может перехватить это событие и отреагировать на него.
Применение в кибербезопасности и криминалистике
В PowerShell 5.0 появилась функция логирования блоков скриптов (событие с идентификатором 4104) , которая сохраняет полное содержимое выполненных скриптов. Это крайне важно для обнаружения подозрительной активности.
Если скрипт длинный, он сохраняется в виде нескольких фрагментов в журналах. Вы можете восстановить его, отфильтровав по идентификатору ScriptBlock и отсортировав события. Также есть скрипт ExtractAllScripts.ps1 который автоматизирует эту задачу. Используя его, можно объединить фрагменты, которые выживают при ротации логов, и восстановить большую часть выполненного контента.
Хотя PowerShell в прошлом подвергался критике за потенциальную возможность злонамеренного использования, при правильной настройке он становится незаменимым инструментом для защиты от атак, аудита изменений и автоматического реагирования на аномальное поведение. Чтобы понять, как обнаруживать подозрительную активность, ознакомьтесь с разделом « Настройка DHCP и DNS на Windows Server».
Освоив события в PowerShell, вы сможете создавать более безопасные, эффективные и автоматизированные среды. От мониторинга процессов до обработки сетевых или файловых событий, гибкость PowerShell колоссальна. Ключевым моментом является понимание того, как подписаться на соответствующие события и как использовать эту информацию для выполнения действий, тем самым усиливая свою отзывчивость и безопасность.
Страстный писатель о мире байтов и технологий в целом. Мне нравится делиться своими знаниями в письменной форме, и именно этим я и займусь в этом блоге: покажу вам все самое интересное о гаджетах, программном обеспечении, оборудовании, технологических тенденциях и многом другом. Моя цель — помочь вам ориентироваться в цифровом мире простым и интересным способом.
