(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo exportar eventos de Seguridad de Windows en PowerShell: paso a paso

João Barros 05 de September de 2026 4 min de lectura

Esta guía muestra cómo exportar eventos del registro de Seguridad de Windows en PowerShell para análisis, auditoría e integración con otras herramientas. Saber filtrar por ID, intervalo de tiempo y exportar a CSV o XML es útil para detectar fallos de autenticación, cambios de política o actividades sospechosas.

Requisitos previos

  • Windows 10/11 o Windows Server con PowerShell 5.1 o PowerShell 7 instalado.
  • Permisos administrativos para leer el registro de Seguridad.
  • Editor de texto (Notepad, VS Code) para guardar scripts.

Paso 1: Entender el registro y los Event IDs comunes

Antes de ejecutar comandos, es importante saber que el registro de Seguridad contiene eventos como fallos de inicio de sesión (Event ID 4625), éxito de inicio de sesión (4624) y cambio de privilegios (4672). Identificar los Event IDs que interesan facilita el filtrado y reduce el volumen de datos.

Paso 2: Listar eventos recientes con Get-WinEvent

Get-WinEvent es más flexible que Get-EventLog para registros modernos. Use un filtro simple para ver los 50 eventos más recientes del canal Security.

Get-WinEvent -LogName Security -MaxEvents 50 | Select-Object TimeCreated, Id, LevelDisplayName, Message

Paso 3: Filtrar por Event ID e intervalo de tiempo

Para buscar eventos específicos, combine un Hashtable de filtro con Get-WinEvent. Ejemplo: todos los Event ID 4625 en los últimos 7 días.

$filter = @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-7)}
Get-WinEvent -FilterHashtable $filter | Select-Object TimeCreated, Id, Message

Paso 4: Filtrar por varios Event IDs

Cuando necesita varios Event IDs (p. ej.: 4624 y 4625) use una matriz en el filtro. Esto es útil para comparar exitos y fallos de inicio de sesión.

$ids = @(4624,4625)
$filter = @{LogName='Security'; Id=$ids; StartTime=(Get-Date).AddDays(-1)}
Get-WinEvent -FilterHashtable $filter | Select-Object TimeCreated, Id, Message

Paso 5: Extraer campos útiles del Message

El campo Message contiene texto libre. Para informes, extraiga valores como AccountName o IP con expresiones regulares sencillas.

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-1)} |
ForEach-Object {
  $msg = $_.Message
  $account = ($msg -match 'Account Name:\s+(\S+)' ) ? $matches[1] : ''
  $ip = ($msg -match 'Source Network Address:\s+(\S+)' ) ? $matches[1] : ''
  [PSCustomObject]@{
    TimeCreated = $_.TimeCreated
    Id = $_.Id
    Account = $account
    SourceIP = $ip
  }
} | Format-Table -AutoSize

Paso 6: Exportar a CSV

Después de construir objetos limpios, exporte a CSV para análisis en Excel o para almacenamiento. Elija una ruta con permisos de escritura.

$out = 'C:\Temp\SecurityEvents.csv'
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=@(4624,4625); StartTime=(Get-Date).AddDays(-7)} |
ForEach-Object {
  $msg = $_.Message
  $account = ($msg -match 'Account Name:\s+(\S+)' ) ? $matches[1] : ''
  $ip = ($msg -match 'Source Network Address:\s+(\S+)' ) ? $matches[1] : ''
  [PSCustomObject]@{
    TimeCreated = $_.TimeCreated
    Id = $_.Id
    Account = $account
    SourceIP = $ip
  }
} | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8
Write-Host "Exportado para $out"

Paso 7: Exportar a XML o fichero bruto

Para archivar la estructura completa del evento, exporte el evento entero en formato XML. Esto preserva todos los campos y es útil para ingestión por herramientas SIEM.

$xmlOut = 'C:\Temp\SecurityEvents.xml'
Get-WinEvent -FilterHashtable @{LogName='Security'; StartTime=(Get-Date).AddDays(-1)} |
Select-Object -First 100 | ForEach-Object { $_.ToXml() } | Out-File -FilePath $xmlOut -Encoding UTF8
Write-Host "XML guardado en $xmlOut"

Paso 8: Programar exportación automática (opción)

Si necesita informes regulares, guarde el script y cree una tarea en el Task Scheduler que ejecute PowerShell con el fichero. Asegúrese de ejecutarlo con credenciales que tengan acceso al registro de Seguridad.

powershell -ExecutionPolicy Bypass -File C:\Scripts\ExportSecurityEvents.ps1

Verificar el resultado

Abra el fichero CSV en Excel o el XML en un editor para confirmar que los eventos se han exportado. Verifique el número de filas, las marcas de tiempo y si los campos Account/SourceIP están rellenados. Si no hay resultados, confirme permisos y el intervalo de tiempo usado.

Conclusión

Exportar eventos de Seguridad en PowerShell permite monitorizar autenticaciones y actividades sospechosas y alimentar SIEMs o informes. Para avanzar, pruebe a filtrar por EventData más específicos, integrar con Send-MailMessage para alertas o enviar a un endpoint REST. Consejo: empiece probando filtros pequeños (1 día, pocos Event IDs) para evitar grandes volcados de datos — ¿qué evento pretende analizar primero?