hace 11 años
Los registros de eventos de Windows PowerShell son una herramienta fundamental para supervisar y solucionar problemas en entornos Windows. Permiten registrar detalles importantes sobre las operaciones de PowerShell, como el inicio y la detención del motor, el uso de proveedores y la ejecución de comandos. En este artículo, exploraremos a fondo cómo acceder y analizar estos registros para obtener información valiosa sobre el funcionamiento de tus scripts y sistemas.

¿Qué son los registros de eventos de Windows PowerShell?
Windows PowerShell, al igual que otras aplicaciones de Windows, utiliza el sistema de registro de eventos de Windows para registrar información sobre su funcionamiento. El registro específico de PowerShell se llama "Windows PowerShell" y almacena datos sobre diversos aspectos de la actividad de PowerShell. Estos registros son cruciales para el diagnóstico de problemas, la auditoría de seguridad y el seguimiento del rendimiento.

Por defecto, el registro de eventos de Windows PowerShell se centra en los eventos del motor y los proveedores de PowerShell. Sin embargo, es posible personalizar qué tipo de eventos se registran mediante el uso de variables de preferencia. Esto permite a los administradores adaptar el nivel de detalle del registro a sus necesidades específicas, desde el seguimiento básico del motor hasta el registro exhaustivo de la ejecución de comandos.
Visualización del registro de eventos de Windows PowerShell
Existen varias formas de acceder y visualizar el registro de eventos de Windows PowerShell. Las dos principales son el Visor de eventos de Windows y los cmdlets de PowerShell, como Get-EventLog y Get-WmiObject.
Usando el Visor de eventos
El Visor de eventos es una herramienta gráfica integrada en Windows que permite explorar todos los registros de eventos del sistema, incluyendo el de Windows PowerShell. Para acceder al Visor de eventos, puedes buscar "Visor de eventos" en el menú de inicio o ejecutar el comando eventvwr.msc.
Una vez abierto el Visor de eventos, navega hasta Registros de aplicaciones y servicios -> Windows PowerShell. Aquí encontrarás el registro de eventos de Windows PowerShell. Puedes examinar los eventos individualmente, filtrarlos por fecha, nivel de gravedad, origen y otros criterios, y guardar los registros para su análisis posterior.
Usando el cmdlet Get-EventLog
El cmdlet Get-EventLog es una herramienta de línea de comandos de PowerShell diseñada específicamente para acceder a los registros de eventos. Es una forma rápida y eficiente de consultar el registro de eventos de Windows PowerShell directamente desde la consola.
Para ver el contenido completo del registro de eventos de Windows PowerShell, puedes ejecutar el siguiente comando:
Get-EventLog -LogName "Windows PowerShell"Este comando recuperará todos los eventos del registro "Windows PowerShell" y los mostrará en la consola. La salida mostrará información como la fecha y hora del evento, el origen, el ID del evento, el nivel de gravedad y el mensaje descriptivo.
Puedes utilizar otros cmdlets de PowerShell para analizar y organizar los eventos recuperados por Get-EventLog. Por ejemplo, puedes usar Sort-Object para ordenar los eventos por una propiedad específica, como el ID del evento:
Get-EventLog "Windows PowerShell" | Sort-Object EventIDO puedes usar Group-Object para agrupar los eventos por ID de evento y obtener un resumen de la frecuencia de cada tipo de evento:
Get-EventLog "Windows PowerShell" | Group-Object EventIDEl cmdlet Format-Table también es útil para presentar los eventos de forma más legible en la consola, agrupándolos por una propiedad específica:
Get-EventLog "Windows PowerShell" | Format-Table -GroupBy EventIDPara obtener una lista de todos los registros de eventos clásicos disponibles en el sistema, puedes usar el siguiente comando:
Get-EventLog -ListUsando el cmdlet Get-WmiObject
El cmdlet Get-WmiObject permite interactuar con la Instrumentación de administración de Windows (WMI), incluyendo las clases WMI relacionadas con los registros de eventos. Aunque menos común para la visualización básica, Get-WmiObject ofrece un acceso más profundo a la información del registro.
Para ver todas las propiedades del archivo de registro de eventos de Windows PowerShell usando WMI, puedes usar el siguiente comando:
Get-WmiObject Win32_NTEventlogFile | where LogFileName -EQ "Windows PowerShell" | Format-List -Property *Este comando utiliza la clase WMI Win32_NTEventlogFile para obtener información sobre el archivo de registro y filtra por el nombre de archivo "Windows PowerShell". El Format-List -Property * muestra todas las propiedades del objeto resultante.
Para encontrar otras clases WMI relacionadas con eventos, puedes usar este comando:
Get-WmiObject -List | where Name -Like "win32*event*"Selección de eventos para el registro de eventos de Windows PowerShell
PowerShell te permite controlar qué tipos de eventos se registran en el registro de eventos de Windows PowerShell a través de las variables de preferencia de registro de eventos. Existen seis variables de este tipo, agrupadas en pares para tres componentes principales: el motor de PowerShell, los proveedores y los comandos.
Las variables que terminan en "LifeCycleEvent" registran eventos normales de inicio y detención, mientras que las variables que terminan en "HealthEvent" registran eventos de error.
La siguiente tabla resume las variables de preferencia de registro de eventos:
| Variable | Descripción |
|---|---|
$LogEngineLifeCycleEvent | Registra el inicio y la detención de PowerShell. |
$LogEngineHealthEvent | Registra errores del programa PowerShell. |
$LogProviderLifeCycleEvent | Registra el inicio y la detención de los proveedores de PowerShell. |
$LogProviderHealthEvent | Registra errores de los proveedores de PowerShell. |
$LogCommandLifeCycleEvent | Registra el inicio y la finalización de los comandos. |
$LogCommandHealthEvent | Registra errores de comando. |
Por defecto, solo los siguientes tipos de eventos están habilitados:
$LogEngineLifeCycleEvent$LogEngineHealthEvent$LogProviderLifeCycleEvent$LogProviderHealthEvent
Para habilitar un tipo de evento, simplemente establece la variable de preferencia correspondiente a $true. Por ejemplo, para habilitar el registro de eventos del ciclo de vida de los comandos, puedes usar:
$LogCommandLifeCycleEvent = $trueDe manera similar, para deshabilitar un tipo de evento, establece la variable de preferencia a $false. Por ejemplo, para deshabilitar los eventos del ciclo de vida del proveedor:
$LogProviderLifeCycleEvent = $falseEs importante tener en cuenta que no puedes deshabilitar los eventos que indican el inicio del motor de PowerShell y los proveedores principales, ya que estos se generan antes de que se ejecuten los perfiles de PowerShell y antes de que el programa host esté listo para aceptar comandos.
Los cambios en estas variables solo se aplican a la sesión actual de PowerShell. Para que los cambios sean permanentes en todas las sesiones, debes agregarlos a tu perfil de Windows PowerShell.
Registro de eventos de módulos
A partir de Windows PowerShell 3.0, es posible registrar eventos de ejecución para cmdlets y funciones dentro de módulos y complementos de PowerShell. Esto se logra configurando la propiedad LogPipelineExecutionDetails de módulos y complementos a $true. En versiones anteriores (PowerShell 2.0), esta función solo estaba disponible para complementos.
Cuando LogPipelineExecutionDetails se establece en $true, PowerShell registra eventos de ejecución de cmdlets y funciones de la sesión en el registro de eventos de Windows PowerShell.

Para habilitar el registro de eventos de ejecución de cmdlets y funciones en un módulo, puedes usar la siguiente secuencia de comandos:
Import-Module Microsoft.PowerShell.Archive $m = Get-Module Microsoft.PowerShell.Archive $m.LogPipelineExecutionDetails = $truePara complementos, la secuencia es similar:
$m = Get-PSSnapin Microsoft.PowerShell.Core $m.LogPipelineExecutionDetails = $truePara deshabilitar el registro, simplemente repite la secuencia de comandos estableciendo la propiedad a $false.
También puedes utilizar la configuración de Directiva de grupo "Activar registro de módulos" para habilitar o deshabilitar el registro de módulos y complementos a nivel del sistema. Esta directiva permite especificar una lista de nombres de módulos y complementos para los que se activará el registro, admitiendo caracteres comodín.
Cuando la directiva "Activar registro de módulos" está configurada para un módulo, el valor de LogPipelineExecutionDetails para ese módulo será $true en todas las sesiones y no se podrá modificar localmente.
La configuración de directiva de grupo "Activar registro de módulos" se encuentra en las siguientes rutas:
- Configuración del equipo\Plantillas administrativas\Componentes de Windows\Windows PowerShell
- Configuración de usuario\Plantillas administrativas\Componentes de Windows\Windows PowerShell
La directiva de Configuración de usuario tiene prioridad sobre la de Configuración del equipo, y ambas directivas tienen prioridad sobre el valor de la propiedad LogPipelineExecutionDetails de módulos y complementos.
Seguridad y auditoría de los registros de eventos
El registro de eventos de Windows PowerShell está diseñado principalmente para registrar la actividad y proporcionar detalles operativos para la resolución de problemas. Sin embargo, es fundamental comprender que, al igual que la mayoría de los registros de eventos de aplicaciones basadas en Windows, no está diseñado para ser un mecanismo de seguridad robusto.
No se recomienda utilizar el registro de eventos de Windows PowerShell para auditorías de seguridad críticas o para registrar información confidencial o propietaria. Los registros de eventos están diseñados para ser legibles y comprensibles por los usuarios, y los usuarios con permisos adecuados pueden leer y escribir en el registro.
Un usuario malintencionado podría, en teoría, leer los registros de eventos en un equipo local o remoto, registrar datos falsos o incluso impedir el registro de sus propias actividades. Por lo tanto, para fines de seguridad y auditoría, se deben considerar mecanismos más robustos y dedicados.
Preguntas frecuentes (FAQ)
- ¿Cómo puedo borrar el registro de eventos de Windows PowerShell?
Puedes borrar el registro de eventos de Windows PowerShell desde el Visor de eventos. Haz clic derecho en el registro "Windows PowerShell" y selecciona "Vaciar registro...". También puedes usar el cmdlet
Clear-EventLog -LogName "Windows PowerShell"en PowerShell. - ¿Dónde se almacenan físicamente los registros de eventos de Windows PowerShell?
Los registros de eventos de Windows PowerShell se almacenan como archivos
.evto.evtxen el directorio%SystemRoot%\System32\winevt\Logs. El archivo específico para PowerShell suele ser algo comoWindows PowerShell.evtx. - ¿Puedo enviar los registros de eventos de Windows PowerShell a un sistema de registro centralizado?
Sí, puedes configurar Windows para reenviar los registros de eventos a un servidor de recopilación de eventos centralizado. Esto es útil para la supervisión y el análisis centralizado de registros de múltiples sistemas. Puedes usar el servicio de reenvío de eventos de Windows o herramientas de terceros para esta tarea.
- ¿Qué tipos de eventos son más importantes para supervisar en el registro de eventos de Windows PowerShell?
Depende de tus necesidades específicas, pero generalmente es útil supervisar los eventos de error (HealthEvent) tanto del motor como de los proveedores y comandos. Los eventos de ciclo de vida (LifeCycleEvent) también pueden ser valiosos para rastrear el inicio y la detención de componentes y comandos.
- ¿Cómo puedo filtrar los eventos en el registro de eventos de Windows PowerShell para encontrar información específica?
Tanto el Visor de eventos como el cmdlet
Get-EventLogofrecen capacidades de filtrado. En el Visor de eventos, puedes usar las opciones de "Filtrar registro actual..." para definir criterios de filtrado. ConGet-EventLog, puedes usar parámetros como-EntryType,-Source,-EventIDy-TimeGeneratedpara filtrar los resultados.
En resumen, los registros de eventos de Windows PowerShell son una herramienta poderosa para entender y gestionar tus entornos PowerShell. Dominar las técnicas de visualización, personalización y análisis de estos registros te permitirá mejorar la estabilidad, seguridad y rendimiento de tus sistemas.
