Учебник по использованию событий в PowerShell: от журналов до расширенной автоматизации

Последнее обновление: 05/06/2025
Автор: Исаак
  • 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.

  Простые способы исправить ошибку «Этот веб-сайт недоступен» в Chrome

Базовые запросы с 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" }

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

  Превратите свой старый ПК в NAS: полное и безопасное руководство

События движка PowerShell

События 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 колоссальна. Ключевым моментом является понимание того, как подписаться на соответствующие события и как использовать эту информацию для выполнения действий, тем самым усиливая свою отзывчивость и безопасность.

просмотрщик событий windows Eventvwr
Связанная статья:
Расширенная диагностика с помощью средства просмотра событий в Windows 11: полное руководство