- PowerShell combina historial de sesión y PSReadLine para persistencia y búsquedas avanzadas entre sesiones.
- Gestiona PowerShell con Get/Invoke/Add/Clear-History, atajos (F7, F8, F9, Ctrl+R/S) y opciones de PSReadLine.
- CMD ofrece F7 y doskey para ver, exportar y ajustar el tamaño del historial, aunque es solo por sesión.
- La auditoría con eventos 4688/4689 permite registrar procesos y líneas de comando a nivel de sistema.
Revisar lo que hemos tecleado en la consola es oro puro cuando estamos documentando, repitiendo tareas o corrigiendo errores. En Windows conviven CMD y PowerShell, y cada uno maneja el historial de comandos de forma distinta, con atajos, opciones de búsqueda, exportación y borrado que conviene dominar.
En esta guía práctica y muy completa aprenderás cómo ver, buscar, exportar, importar y eliminar el historial en PowerShell y CMD, cómo funciona el historial persistente de PSReadLine, qué parámetros ofrece Clear-History, qué atajos aceleran el trabajo y cómo auditar procesos con eventos 4688 y 4689 si necesitas un registro forense.
PowerShell vs CMD: cómo funciona su historial
PowerShell y CMD no juegan en la misma liga cuando hablamos de historial. CMD solo conserva los comandos durante la sesión activa, mientras que PowerShell combina un historial de sesión integrado con otro persistente mantenido por el módulo PSReadLine.
El historial de sesión integrado de PowerShell es volátil y se borra al cerrar la consola; se consulta con Get-History y se gestiona con cmdlets como Invoke-History, Add-History o Clear-History. Por defecto, la variable $MaximumHistoryCount limita el número de entradas y generalmente está en 4096.
PSReadLine guarda un archivo de historial por usuario y host, y mantiene el historial entre sesiones. Este archivo, disponible desde PowerShell 5.0, permite navegar con las flechas arriba y abajo, y realizar búsquedas incrementales mediante combinaciones de teclado.
Ver y buscar el historial en PowerShell
Get-History es la puerta de entrada al historial de la sesión. Muestra el Id, línea de comando y orden de ejecución; su alias es ‘h’. Sin embargo, solo refleja lo ocurrido en la sesión actual, no el archivo persistente de PSReadLine.
Get-History
Los atajos de teclado en la consola ahorran tiempo: flecha arriba para comandos previos, flecha abajo para siguientes, F7 para listar en una ventana, ESC para cerrar, F8 para buscar por prefijo (teclea y pulsa F8), y F9 para ejecutar por Id.
La búsqueda inversa, muy útil: Ctrl+R busca hacia atrás en el historial, escribiendo parte del comando, y Ctrl+S realiza la búsqueda hacia adelante. PSReadLine permite también buscar con ‘#cadena’ y saltar entre coincidencias pulsando Tab.
El orden del historial puede parecer extraño: PowerShell agrega comandos cuando estos finalizan, no al teclearlos, y en prompts anidados algunos no se registran hasta regresar al nivel anterior, lo cual puede confundir en ejecuciones largas.
Historial persistente con PSReadLine
PSReadLine mantiene un registro permanente en un archivo de texto por usuario y host, garantizando que los comandos previos se puedan recuperar tras cerrar y volver a abrir PowerShell.
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Se puede consultar y modificar su comportamiento con Get-PSReadLineOption y Set-PSReadLineOption. Esto permite configurar aspectos como duplicados, sensibilidad a mayúsculas, ruta y estilo de guardado entre otras preferencias.
Get-PSReadLineOption | Select HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
Opciones clave a tener en cuenta:
- HistoryNoDuplicates: evita entradas repetidas, reduciendo duplicados
- MaximumHistoryCount: controla el número máximo de comandos almacenados
- HistorySearchCursorMovesToEnd: ajusta la posición del cursor en búsquedas
- HistorySearchCaseSensitive: realiza búsquedas sensibles a mayúsculas
- HistorySavePath: define la ruta del archivo de historial
- HistorySaveStyle: determina cuándo se guarda el historial, opciones incluyen SaveIncrementally, SaveAtExit y SaveNothing
Se puede personalizar mediante Set-PSReadLineOption. Por ejemplo, para guardar solo al salir y reducir escrituras en disco:
Set-PSReadLineOption -HistorySaveStyle SaveAtExit
Controla también el tamaño del historial con $MaximumHistoryCount. Para limitarlo a 100 comandos, ajusta la variable y reinicia PowerShell; para que sea persistente, añádelo a tu perfil de PowerShell.
$MaximumHistoryCount = 100
Borrar, filtrar y gestionar el historial en PowerShell
Clear-History limpia el historial de la sesión activa, sin afectar el archivo persistente de PSReadLine. Se usa para comenzar desde cero o eliminar entradas específicas por Id, patrón, cantidad o antigüedad.
Sintaxis principal con conjuntos de parámetros:
Clear-History <int[]>] <int>]
Clear-History <int>] >]
Parámetros utilizados: -Id para borrar por identificador, -CommandLine para patrones exactos o comodines, -Count para la cantidad de entradas, y -Newest para invertir el orden y eliminar las últimas. También admite confirmación y modo simulación con -WhatIf.
Ejemplo: eliminar todo el historial en la sesión activa:
Get-History
Clear-History
Get-History
Ejemplo: eliminar las 5 últimas entradas con -Count y -Newest:
Clear-History -Count 5 -Newest
Get-History
Ejemplo: eliminar entradas que coincidan con patrones con -CommandLine:
Clear-History -CommandLine '*Help*', '*Syntax'
Get-History
Ejemplo: borrar por Ids específicos:
Clear-History -Id 3, 5
Get-History
Ejemplo: combinar -Id y -Count para eliminar en secuencia desde un Id específico:
Clear-History -Id 7 -Count 5
Get-History
Recuerda: -Count con -Id elimina desde el Id incluido, con -CommandLine elimina las coincidencias en orden, y por defecto elimina las entradas más antiguas, salvo que uses -Newest.
Ejecutar y cargar comandos desde el historial en PowerShell
Invoke-History ejecuta una entrada del historial sin tener que reescribirla. Su alias es ‘r’. Sin parámetros, repite la última; con Id, ejecuta exactamente ese comando:
Invoke-History # Repetir la última entrada
Invoke-History -Id 12 # Ejecutar la entrada 12
También puedes exportar e importar el historial para documentar o compartir procedimientos. Se exporta a CSV o Clixml y se vuelve a importar añadiéndolo con Add-History:
Get-History | Export-Csv -Path .\historial.csv -NoTypeInformation
Get-History | Export-Clixml -Path .\historial.xml
$h = Import-Clixml .\historial.xml
$h | Add-History
Ver y gestionar el historial en CMD
CMD mantiene solo un historial durante la sesión activa. Puedes navegar con las flechas arriba y abajo, usar PgUp y PgDn para desplazamientos, y presionar F7 para abrir una ventana con todos los comandos guardados; ESC cierra esa ventana.
Otros atajos útiles en CMD: F9 para pedir el número de comando en la lista visualizada y F8 para buscar coincidencias que empiezan con lo que has escrito hasta ahora en la línea.
Doskey amplia las capacidades: permite ver el historial completo con ‘doskey /history’ o guardarlo en un archivo con redirección, por ejemplo, ‘doskey /history > C:\cmd_history.txt’. También puedes ajustar el tamaño de memoria con /listsize=100.
Para limpiar el historial en memoria, utiliza la combinación de teclado Alt+F7. No olvides que al cerrar CMD, el historial se pierde salvo si exportaste previamente.
Para tener un historial persistente más potente en CMD, puedes usar herramientas como Clink, que mejoran significativamente la gestión y búsqueda del historial, o Windows Terminal, que integra varias consolas y soporte para PowerShell y WSL2.
Auditar comandos y procesos con el Visor de eventos
Para un control exhaustivo y centralizado, puedes registrar la creación de procesos mediante auditoría avanzada. El evento 4688 registra cada proceso iniciado, con datos del usuario, contexto y línea de comandos; el 4689 indica su finalización.
Activar ‘Audit process creation’ en la política de seguridad local, en la sección de auditoría avanzada, configurando Success y/o Failure según prefieras.
Luego, ajusta la directiva en gpedit.msc en Computer Configuration > Windows Settings > Security Settings > Advanced Audit Policy Configuration > System Audit Policies > Detailed Tracking y habilítala.
Para visualizar estos eventos, abre el Visor de eventos en Windows, navega a Windows Logs > Security, y filtra por Id 4688. Para análisis más profundo, herramientas como Logbinder Supercharger pueden facilitar la revisión.
Cmdlets y notas útiles del historial en PowerShell
Cmdlets principales de historial: Get-History (alias ‘h’) para ver, Invoke-History (alias ‘r’) para ejecutar, Add-History para añadir comandos, y Clear-History (alias ‘clhy’) para eliminar. El historial de PowerShell y PSReadLine conviven, pero Clear-History solo afecta al de la sesión activa.
Notas finales sobre Clear-History: no acepta entrada por canalización, no devuelve salida, admite comodines en -CommandLine, y soporta CommonParameters como -Verbose y -ErrorAction para control adicional.
Dominar el historial en PowerShell y CMD facilita la recuperación rápida de comandos, depuración de procedimientos, documentación y auditoría. PSReadLine aporta persistencia y potencia en búsqueda, mientras que Clear-History controla qué comandos permanecen en la sesión, y los eventos 4688 y 4689 elevan el registro al nivel de seguridad y cumplimiento.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.