Cada administrador de sistemas de Windows probablemente está familiarizado con el Registro de eventos de Windows. El uso de este cmdlet en PowerShell permite a los sysadmins analizar muchos eventos a la vez en muchos equipos a la vez. Libera a los sysadmins de hacer clic en el Visor de eventos tratando de averiguar el filtro adecuado para usar y determinar dónde se almacena precisamente ese evento crítico. Sin embargo, Get-EventLog
tiene sus inconvenientes que verás.
Enumeración de registros de eventos con Get-EventLog
El cmdlet Get-EventLog
está disponible en todas las versiones modernas de Windows PowerShell. En su uso más directo, este cmdlet necesita un registro de eventos para consultar, que luego mostrará todos los eventos en ese registro de eventos.
Pero, ¿qué pasa si no conoces el nombre del registro de eventos en primer lugar? En ese caso, necesitamos averiguar todos los registros de eventos que están disponibles en nuestra computadora local. Hacemos eso usando el comando Get-EventLog -List
.

Puedes ver que tengo algunos registros de eventos en mi sistema local ahora, pero podrías preguntarte ¿dónde están los demás? Hay docenas de otros registros de eventos que aparecen bajo Aplicaciones y registros de servicios en el Visor de eventos. ¿Por qué no están aquí?
Si necesitas esos eventos, lamentablemente, Get-EventLog
no va a funcionar. En su lugar, deberás consultar Get-WinEvent. El cmdlet Get-EventLog
podría considerarse un cmdlet heredado en este punto, pero es uno que todavía uso con frecuencia simplemente porque es muy fácil de usar.
Consulta de eventos con Get-EventLog
Ahora que conocemos todos los registros de eventos disponibles, podemos leer los eventos dentro de ese registro de eventos. Tal vez quiera ver todos los eventos en el registro de eventos de la Aplicación. Para obtener esos eventos, necesito especificar el parámetro LogName
con Get-EventLog
y el cmdlet se encargará de devolver todos los eventos en ese registro de eventos.

De forma predeterminada, solo verás seis propiedades en la salida:
Index
Time
EntryType
Source
InstanceId
Message
En realidad, Get-EventLog
devuelve 16 de ellas. La razón por la que solo ves seis es debido a las reglas de formato de PowerShell que definen la salida. A continuación, se muestra un ejemplo de la salida real encontrada al pasar Get-EventLog
a Select-Object
y seleccionar todas las propiedades.

Filtrando con Get-EventLog
Lo más probable es que al buscar eventos, no necesitemos todos los eventos. En cambio, solo necesitamos algunos. En ese caso, necesitamos filtrar eventos específicos. Get-EventLog
tiene algunas formas diferentes de hacer esto. El cmdlet Get-EventLog
puede filtrar según la marca de tiempo, el tipo de entrada, el ID de evento, el mensaje, la fuente y el nombre de usuario. Esto se encarga de la mayoría de las formas de encontrar eventos.
Para demostrar el filtrado, tal vez estoy consultando eventos de vez en cuando y quiero encontrar los diez eventos más recientes. En ese caso, puedo usar el parámetro Newest
y especificar cuántos eventos me gustaría ver. Get-EventLog -LogName Application -Newest 10
devolverá solo los diez eventos más recientes.
Tal vez quiera encontrar todos los eventos después de un momento específico. Para eso, tenemos el parámetro After
. El parámetro After
toma una fecha/hora, así que si quiero encontrar solo los eventos dentro del registro de la aplicación que ocurrieron después del 26/01/19 a las 10:17 AM, podría hacer esto Get-EventLog -LogName Application -After '26/01/19 10:17'
. También podríamos realizar el mismo proceso pero seleccionar eventos que ocurrieron antes de una fecha específica con, quizás lo hayas adivinado, el parámetro Before
.
El Get-EventLog
tiene muchas formas diferentes de filtrar, sin incluir la marca de tiempo. También podemos filtrar eventos según otros atributos como el ID del evento (ID de instancia) y el mensaje, que tienden a ser atributos comunes para buscar. Tal vez sé que estoy buscando un evento con un ID de 916; pasaríamos 916 al parámetro InstanceId
.
También podemos combinar filtros. Tal vez obtenga muchos eventos devueltos con un ID de 916, pero quiero esos eventos con la cadena svchost en el mensaje. En ese caso, podemos agregar el parámetro Message
a Get-EventLog
y especificar un comodín como svchost.
¡Script de bonificación!
¿Necesitas un gran ejemplo de cómo usar Get-EventLog en un script del mundo real? ¡Si es así, estás de suerte! A continuación se muestra un caso de uso avanzado de Get-EventLog
que puedes descargar y usar hoy mismo!
Resumen
El cmdlet Get-EventLog
es un excelente comando para usar si alguna vez necesitas consultar rápidamente uno de los registros de eventos comunes. Es fácil de usar y proporciona cierta capacidad de filtrado básico. Sin embargo, si necesitas hacer alguna investigación profunda en los registros de eventos, es probable que el comando Get-WinEvent
funcione mejor, pero es un poco más difícil de usar y a veces requiere conocer la sintaxis como XPath.