Tutorial para usar eventos en PowerShell: desde logs hasta automatización avanzada

Última actualización:
Autor:
  • PowerShell permite manejar distintos tipos de eventos: del motor, .NET, WMI y más.
  • Los cmdlets como Register-ObjectEvent y Get-Event permiten trabajar con eventos en tiempo real.
  • Se pueden automatizar tareas al detectar eventos como cierres de procesos, cambios en archivos o registros de sistema.
  • PowerShell permite leer, filtrar y exportar eventos de los registros estándar y personalizados de Windows.

events eventos windows

¿Te gustaría aprender cómo gestionar eventos en PowerShell de forma eficiente y aprovechar sus capacidades para automatizar tareas o detectar actividades del sistema? Aunque PowerShell es conocido por ser una herramienta de administración de sistemas, su verdadero poder aparece al usarlo junto con eventos. En este artículo te explicamos TODO lo que necesitas saber sobre cómo utilizar eventos con PowerShell, basándonos en documentación oficial y artículos técnicos especializados.

Desde los registros del sistema hasta los eventos personalizados, PowerShell te permite capturar, analizar y reaccionar ante cualquier tipo de suceso. Veremos tanto los comandos básicos como ejemplos avanzados usando clases del .NET Framework. Además, te enseñaremos a visualizar eventos, suscribirte a ellos y desencadenar acciones automatizadas en función del evento capturado. Vamos a ello.

Tipos de eventos que puedes manejar en PowerShell

PowerShell tiene la capacidad de trabajar con diferentes tipos de eventos, cada uno con sus propias características. Aquí los principales:

  • Eventos del motor de PowerShell: como OnIdle (cuando no hay actividad) y Exiting (cuando se cierra la sesión).
  • Eventos de objetos del .NET Framework: como el cierre de procesos, modificación de archivos, etc.
  • Eventos WMI y CIM: ideales para escenarios de monitorización más avanzada, disponibles desde PowerShell 3.0.
  • Eventos personalizados: creados con New-Event para manejar contextos específicos dentro de tus scripts.

Visualizar y trabajar con logs con PowerShell

Una de las formas más comunes de trabajar con eventos en PowerShell es consultando los registros de eventos de Windows. Puedes acceder a ellos desde el Visor de eventos gráfico (ejecuta eventvwr), pero PowerShell te da un control mucho más fino con los cmdlets Get-EventLog y Get-WinEvent. Además, si deseas aprender a detectar problemas específicos del sistema, puedes consultar este diagnóstico del visor de eventos en Windows 11.

  Capas y composición en Adobe Premiere Pro: Guía completa

Consultas básicas con Get-EventLog

Este cmdlet es útil para trabajar con logs clásicos como Application, System o Security. Algunos ejemplos:

  • Listar todos los logs: Get-EventLog -List
  • Obtener los últimos 10 eventos: Get-EventLog -LogName System -Newest 10
  • Filtrar por tipo: Get-EventLog -LogName System -EntryType Error
  • Filtrar por mensaje: Get-EventLog -LogName System -Message *dominio*

Consultas más avanzadas con Get-WinEvent

Para logs modernos o personalizados, Get-WinEvent es más potente. Acepta filtros basados en XML, permite trabajar con IDs específicos como el 4104 (usado para scripts de PowerShell registrados) y acceder a registros como Microsoft-Windows-PowerShell/Operational.evtx. Si quieres profundizar en cómo gestionar logs y eventos en Hyper-V, revisa gestionar logs y eventos en Hyper-V.

Por ejemplo, para extraer todos los fragmentos de un script ejecutado (evento 4104 con un mismo ScriptBlock ID):

$StoreArrayHere = Get-WinEvent -FilterHashtable @{ Path="C:\SampleEVTX\Microsoft-Windows-PowerShell%4Operational.evtx"; ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 } | Where-Object { $_.Message -like '*51baf005*' }

Puedes ordenar los fragmentos y unirlos para reconstruir el script completo. Una práctica clave en análisis forense o tareas de ciberseguridad. Para más detalles sobre cómo detectar malware mediante logs, consulta tipos de malware.

Creación y suscripción a eventos personalizados

PowerShell permite crear eventos personalizados con New-Event. Esto es útil para generar eventos internos dentro de scripts complejos. Puedes suscribirte a ellos usando Register-EngineEvent.

Ejemplo:

Register-EngineEvent -SourceIdentifier MyEvent -Action { Write-Host "Se ha producido el evento personalizado" }
New-Event -SourceIdentifier MyEvent -MessageData "Algo pasó"

También puedes ver los eventos en la cola activa con Get-Event y eliminarlos con Remove-Event. Para una gestión más avanzada, revisa dominar el firewall en Windows.

Suscribirse a eventos del .NET Framework

Con Register-ObjectEvent puedes reaccionar a eventos de objetos .NET. Por ejemplo, puedes detectar cuando se cierra una aplicación, se crea un archivo o entra un nuevo log en el sistema.

Ejemplo con el proceso de la calculadora

$calc = ::Start("calc.exe")
Register-ObjectEvent -InputObject $calc -EventName Exited -Action {
    Write-Host "La calculadora se cerró"
}

Ejemplo con FileSystemWatcher

$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = "C:\Users\Public"
Register-ObjectEvent -InputObject $fsw -EventName Created -Action { Write-Host "Archivo nuevo detectado" }

Ejemplo con 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" }

En estos casos, cada vez que se produzca el evento monitorizado, el bloque de acción se ejecutará automáticamente.

  Reparación: sonda DNS completada No hay error en la net

Eventos del motor de PowerShell

powershell events

Son pocos, pero útiles para automatizar tareas comunes:

  • PowerShell.OnIdle: se activa cuando no hay actividad.
  • PowerShell.Exiting: se lanza al cerrar la consola.

Por ejemplo, para guardar el historial de comandos:

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
    Get-History | Export-Clixml "$home\ps_history.xml"
}

Este script se puede incluir en tu perfil de PowerShell, y al iniciar una nueva sesión, puedes recuperar el historial con:

If (Test-Path "$home\ps_history.xml") {
    Add-History -InputObject (Import-Clixml "$home\ps_history.xml")
}

Revisar y gestionar suscripciones

Todos los eventos y suscripciones activos en una sesión se pueden revisar con: Get-EventSubscriber. Para cancelarlos, basta con usar Unregister-Event.

Por ejemplo:

Get-EventSubscriber | Unregister-Event

También puedes usar el parámetro -Force si alguna subscripción no se ve directamente.

Automatización con eventos en segundo plano o remotos

PowerShell admite reenvío de eventos desde sesiones en segundo plano o remotas. Esto lo logras usando el parámetro -Forward en los cmdlets de suscripción.

Ejemplo con un trabajo en segundo plano:

Start-Job -ScriptBlock {
    Register-EngineEvent -SourceIdentifier JobEvent -Forward
    New-Event -SourceIdentifier JobEvent -Message "Trabajo terminado"
}

Tu sesión principal puede capturar y actuar en base a ese evento.

Aplicaciones en ciberseguridad y análisis forense

PowerShell 5.0 introdujo el registro de bloques de scripts (ID de evento 4104), que almacena el contenido completo de los scripts ejecutados. Esto es crucial para detectar actividades sospechosas.

Si un script es extenso, se guarda como múltiples fragmentos en los logs. Puedes reconstruirlo filtrando por ScriptBlock ID y ordenando los eventos. Además, existe el script ExtractAllScripts.ps1 que automatiza esta tarea. Al usarlo, es posible combinar los fragmentos que sobreviven a la rotación de logs y recuperar gran parte del contenido ejecutado.

Aunque PowerShell fue criticado en el pasado por su potencial uso malicioso, bien configurado se convierte en una herramienta esencial para defenderse de ataques, auditar cambios y reaccionar automáticamente ante comportamientos anómalos. Para entender cómo detectar actividades sospechosas, revisa configurar DHCP y DNS en Windows Server.

Al dominar los eventos en PowerShell, puedes crear entornos más seguros, eficientes y automatizados. Desde supervisar procesos hasta manejar eventos de red o archivos, la flexibilidad de PowerShell es enorme. La clave está en comprender cómo suscribirte a eventos relevantes y cómo usar esa información para actuar, fortaleciendo así tu capacidad de respuesta y seguridad.

visor de eventos windows Eventvwr
Artículo relacionado:
Diagnóstico avanzado con el Visor de eventos en Windows 11: guía completa

Deja un comentario