Cómo usar el comando Get-WinEvent en PowerShell

Última actualización: 30/07/2025
Autor: Isaac
  • Get-WinEvent supera a Get-EventLog permitiendo filtros avanzados y acceso a registros modernos
  • El uso de tablas hash y XPath optimiza la búsqueda de eventos específicos en grandes volúmenes de logs
  • Permite administración de logs locales, remotos y almacenados en archivo con control sobre permisos y credenciales

Get-WinEvent PowerShell

PowerShell ha evolucionado convirtiéndose en una de las herramientas imprescindibles para la gestión avanzada de sistemas Windows. Entre sus cmdlets más potentes se encuentra Get-WinEvent, que permite a administradores y usuarios obtener registros de eventos, auditar acciones y monitorizar el estado de sus equipos o servidores de manera muy detallada y flexible.

En este artículo descubrirás todo lo que necesitas saber sobre el comando Get-WinEvent de PowerShell: desde su sintaxis, diferencias frente a otros cmdlets clásicos como Get-EventLog, ejemplos prácticos, optimización del filtrado usando tablas hash, detalles sobre parámetros clave y consejos para sacarle todo el partido tanto en el análisis local como remoto de eventos. Si quieres dominar el análisis de logs y la resolución de incidencias en Windows, sigue leyendo.

¿Qué es Get-WinEvent y por qué es tan útil?

Get-WinEvent es un cmdlet exclusivo de plataformas Windows que permite acceder y explorar los registros de eventos del sistema operativo. Su función principal es obtener eventos almacenados tanto en los logs clásicos (como «System» o «Application») como en los registros creados desde Windows Vista en adelante, además de archivos externos (.evtx, .etl y .evt).

Este comando incorpora importantes ventajas respecto a su antecesor, Get-EventLog. Por ejemplo, puede consultar registros que Get-EventLog no alcanza, permite utilizar filtros avanzados (tablas hash, XPath, XML estructurado) y trabajar con registros remotos sin depender del sistema clásico de remoting de PowerShell. Así, se convierte en una herramienta básica para monitorizar, auditar y resolver incidencias o analizar la actividad tanto de sistemas individuales como de grandes infraestructuras de servidores.

Sintaxis general y conjuntos de parámetros

Sintaxis Get-WinEvent PowerShell

El cmdlet Get-WinEvent presenta una sintaxis versátil que admite múltiples formas de uso según la información que se desee obtener y el tipo de filtro que se aplica. Algunos de los conjuntos de parámetros más habituales son:

  • Búsqueda por nombre de registro: Get-WinEvent >] ...
  • Listado de registros disponibles: Get-WinEvent -ListLog *
  • Consulta de proveedores de registros: Get-WinEvent -ListProvider *
  • Filtrado por tabla hash: Get-WinEvent -FilterHashtable @{ LogName='Application'; Id=1001 }
  • Filtrado por XPath: Get-WinEvent -FilterXPath "*]"
  • Filtrado por XML: Get-WinEvent -FilterXml $xmlQuery

Nota importante: Sin parámetros, Get-WinEvent recupera todos los eventos de todos los registros en el equipo local, lo cual puede generar una salida muy extensa. Para detener el comando, basta presionar CTRL + C.

  Recycle Bin Lacking in Home windows 11/10 : How you can Repair?

Principales parámetros de Get-WinEvent

El cmdlet soporta una gran variedad de parámetros, lo que permite obtener exactamente la información que necesitamos. Aquí tienes un resumen detallado de los más importantes:

  • -LogName: Permite especificar uno o varios nombres de registros de eventos. Se aceptan comodines.
  • -ProviderName: Filtra los resultados en función de proveedores de eventos concretos. Ideal para identificar el origen de determinados eventos.
  • -Path: Permite consultar eventos en archivos guardados con extensión .evtx, .evt o .etl, incluso de otras máquinas.
  • -FilterHashtable: Admite una tabla hash con pares clave-valor para filtrar de manera eficaz por múltiples criterios (como LogName, ProviderName, ID, Level, fechas, etc).
  • -FilterXPath / -FilterXml: Permiten aplicar filtros basados en XPath o consultas XML para criterios complejos.
  • -MaxEvents: Limita el número máximo de eventos devueltos, lo que es muy útil para evitar salidas gigantescas.
  • -Oldest: Puede indicarse para recibir los eventos ordenados del más antiguo al más nuevo (por defecto es al revés).
  • -ComputerName: Consulta registros en equipos remotos especificando el nombre NetBIOS, FQDN o IP.
  • -Credential: Permite autenticarse como otro usuario o con credenciales distintas a las actuales.
  • -Force: Obliga a incluir logs de depuración y analíticos en la consulta, además de los habituales.

Muchos de estos parámetros pueden combinarse para lograr una consulta precisa y potente.

Filtrado avanzado: uso de FilterHashtable

FilterHashtable PowerShell

Uno de los mayores puntos fuertes de Get-WinEvent es su capacidad para filtrar eventos usando tablas hash. En vez de obtener todos los eventos y después filtrarlos en un segundo paso (algo poco eficiente), FilterHashtable aplica los filtros en el propio proceso de obtención, mejorando el rendimiento y reduciendo el consumo de recursos, especialmente en logs voluminosos.

Una tabla hash en este contexto consiste en pares clave-valor como @{ LogName='Application'; Id=1001; Level=2 }. Cada pareja será un criterio de búsqueda. Las claves principales aceptadas incluyen:

  • LogName (admite comodines): nombre del registro.
  • ProviderName (admite comodines): origen del evento.
  • Path: ruta de archivos de logs guardados.
  • Id: identificador numérico del evento.
  • Level: nivel de severidad (Error=2, Warning=3, Informational=4…)
  • Keywords: filtro por palabras clave técnicas (tipo Long[]).
  • StartTime / EndTime: filtrar por rango de fechas.
  • UserID: SID o nombre de usuario asociado al evento.
  • Data o <named-data>: datos personalizados del evento.

Por ejemplo, para obtener eventos críticos de un proveedor concreto en el registro de aplicaciones desde hace 2 días:

$fecha = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='.NET Runtime'; Level=1; StartTime=$fecha }

Consejo: Cada clave de la tabla hash debe aparecer solo una vez y los comodines solo son válidos en LogName y ProviderName.

  WOW64 en Windows: Qué es, cómo funciona y por qué es esencial para la compatibilidad

Ejemplos prácticos de uso

Consultar y analizar registros de eventos puede parecer tedioso, pero con la versatilidad de este cmdlet las posibilidades son inmensas. Aquí tienes algunos ejemplos basados en escenarios reales:

  • Listar todos los registros de eventos disponibles en el sistema:
    Get-WinEvent -ListLog *
  • Obtener los eventos más recientes del registro ‘System’:
    Get-WinEvent -LogName System -MaxEvents 10
  • Filtrar solo los errores de aplicaciones:
    Get-WinEvent -FilterHashtable @{ LogName='Application'; Level=2 }
  • Ver eventos generados por un proveedor:
    Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='Application Error' }
  • Consultar eventos en logs de otros equipos:
    Get-WinEvent -LogName System -ComputerName Servidor01
  • Leer archivos guardados:
    Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'
  • Obtener eventos de una palabra clave concreta:
    Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* | Group-Object -Property LevelDisplayName, LogName -NoElement | Format-Table -AutoSize

Salida, objetos devueltos y compatibilidad

Dependiendo de los parámetros utilizados, Get-WinEvent puede devolver objetos de distintos tipos:

  • EventLogConfiguration: al usar -ListLog, proporciona configuración y propiedades de cada registro.
  • ProviderMetadata: con -ListProvider, muestra metadatos de proveedores de eventos.
  • EventLogRecord: por defecto, representa cada evento concreto y sus atributos (fecha, ID, mensaje, etc).

Se pueden procesar en pipeline y filtrar, agrupar o exportar a otros formatos (CSV, HTML, XML…). Cabe recordar que Get-WinEvent sustituye progresivamente a Get-EventLog, que estaba más limitado y solo soporta logs clásicos.

Visualización y análisis avanzado de logs

Además del análisis de eventos a través de consola o scripts, puedes inspeccionar logs mediante el Visor de eventos de Windows ((https://mundobytes.com/como-usar-el-visor-de-eventos-de-windows-para-detectar-y-anticipar-problemas/)), aunque Get-WinEvent permite mayor automatización, integración y uso remoto.

Para analizar tendencias o incidencias, aprovecha cmdlets como Group-Object para agrupar eventos por ID, Sort-Object para ordenarlos, y Select-Object para limitar los campos mostrados. Por ejemplo, para ver cuántos eventos de cada tipo tienes en el log:

$eventos = Get-WinEvent -LogName 'Windows PowerShell'
$eventos | Group-Object -Property LevelDisplayName | Format-Table Count, Name

Filtrado por XPath y XML: cuando necesitas precisión máxima

En escenarios especialmente complejos puede ser útil usar parámetros como -FilterXPath y -FilterXml para consultas avanzadas. Por ejemplo, para encontrar eventos de cierto nivel y fecha concreta en el log de Windows PowerShell:

# Filtrado por XPath
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath "*]]"

# Filtrado por XML
$xmlQuery = @'
<QueryList>
  <Query Path="Windows PowerShell">
    <Select Path="System">*]]</Select>
  </Query>
</QueryList>'
Get-WinEvent -FilterXml $xmlQuery

Comparativa con Get-EventLog y buenas prácticas

Comparativa Get-EventLog y Get-WinEvent

Aunque Get-EventLog sigue existiendo para compatibilidad retroactiva, sus capacidades son notoriamente inferiores. Por ejemplo, solo accede a logs clásicos y no permite filtrar por proveedor o mediante XPath/Hashtable. En cuanto PowerShell avance y crezcas tus necesidades, lo recomendable es familiarizarse con Get-WinEvent y aprovechar filtros avanzados y procesamiento de grandes volúmenes de eventos con menor impacto en rendimiento.

  Cómo crear un autounattend.xml perfecto para Windows 11 con schneegans.de

Algunas recomendaciones útiles:

  • Utiliza Get-EventLog para consultas rápidas en logs de sistema o seguridad.
  • Aplica Get-WinEvent para filtrar y analizar logs modernos, registros archivados y escenarios complejos.
  • Para buscar la ruta exacta de los logs no clásicos, usa primero el Visor de Eventos y copia la ruta para el parámetro -LogName.
  • Evita volcar todos los eventos en consola: usa -MaxEvents para limitar la salida o filtra con tablas hash.
  • Cuando trabajes con logs grandes o en equipos múltiples, automatiza tareas con scripts y pipelines.

Variables y personalización del registro de PowerShell

PowerShell permite configurar qué tipos de eventos se registran editando variables de preferencia como $LogEngineLifeCycleEvent o $LogCommandHealthEvent. Así puedes decidir si registrar detalles del motor, proveedores, o comandos ejecutados, ajustando la granularidad según tus necesidades.

La activación/desactivación se realiza así:

$LogCommandLifeCycleEvent = $true   # Para registrar inicio/fin de comandos
$LogProviderHealthEvent = $false    # Para desactivar eventos de proveedor

Los cambios afectan solo a la sesión actual, a menos que se añadan al perfil de PowerShell.

Preguntas frecuentes sobre Get-WinEvent y registros de eventos

  • ¿Puedo limpiar el registro de eventos de PowerShell?
    Sí, con Clear-EventLog -LogName "Windows PowerShell" o desde el Visor de eventos (botón derecho > Vaciar registro).
  • ¿Dónde se almacenan los archivos de log de eventos?
    Se localizan en %SystemRoot%\System32\winevt\Logs en archivos .evtx.
  • ¿Es posible reenviar logs a un sistema centralizado?
    Correcto. Se puede configurar Windows para reenviar registros de eventos a un servidor central mediante servicios nativos o herramientas externas.
  • ¿Get-WinEvent funciona en cualquier versión de Windows?
    Solo está soportado en Windows Vista, Server 2008 R2 en adelante. No funciona en Windows PE ni en Nano Server.
visor de eventos windows Eventvwr
Artículo relacionado:
Cómo usar el visor de eventos de Windows para detectar y anticipar problemas

Deja un comentario