De forma predeterminada, Windows PowerShell (así como el símbolo del sistema) guarda el historial de comandos ejecutados solo en la sesión actual de PowerShell. Cuando cierra la ventana de la consola de PowerShell o reinicia su computadora, el historial de los comandos de PowerShell que escribió no se guarda en ninguna parte. Comparado con el bash, este es un inconveniente significativo. Empezando con PowerShell 5.0 introducido en Windows 10 (Windows Server 2016), todos los comandos ingresados en la consola PS ahora se guardan en un archivo de registro de texto sin formato de forma predeterminada.
Historial de comandos en PowerShell 5.0 y versiones posteriores
Suponga que escribió y ejecutó algún comando de PowerShell complejo. En Windows 10 y Windows Server 2016, incluso después de reiniciar la computadora, puede abrir una nueva sesión de PowerShell y presionar la tecla de flecha hacia arriba. El último comando que ingresó debería aparecer en la pantalla. Si continúa presionando la tecla «arriba», verá todos los comandos ejecutados anteriormente. Por lo tanto, utilizando las teclas «Up arrow
» y «Down arrow
”Puede desplazarse por el historial de comandos de PoSh y volver a ejecutar comandos escritos previamente.
En versiones anteriores de PowerShell, el historial de los comandos en la sesión actual no se guarda después de que se cierra. Utilizando el up
/down
teclas, puede desplazarse por el historial de comandos de la sesión actual de PS solamente o listar el historial de comandos completo usando el Obtener historial cmdlet.
Puede mostrar información más detallada sobre los comandos ejecutados anteriormente en la sesión actual de PowerShell, incluido el estado del comando y el tiempo de inicio / finalización / duración:
Get-History | Format-List -Property *
Por defecto, PowerShell en Windows 10 guarda los últimos 4096 comandos que se almacenan en un archivo de texto plano ubicado en el perfil de cada usuario %userprofile%AppDataRoamingMicrosoftWindowsPowerShellPSReadlineConsoleHost_history.txt
.
El historial se almacena por separado para PowerShell y PowerShell ISE.
Si un comando de PowerShell tarda mucho en ejecutarse, solo lo verá en el historial de comandos cuando se complete.
En cmd.exe, puede mostrar el historial de comandos en la sesión actual con:
doskey /history
los F7
La tecla se usa para buscar en el historial de cmd.
¿Cómo buscar en el historial de comandos de PowerShell?
Si no desea desplazarse por todo el historial de comandos de PowerShell con las flechas arriba / abajo, puede buscar en el historial de comandos mediante los métodos abreviados de teclado CTRL + R (búsqueda inversa) y CTR + S (búsqueda hacia adelante). Presione la combinación de teclas y comience a escribir parte del comando que desea encontrar en los comandos ejecutados anteriormente. El texto que ingresó se encontrará en el historial de comandos en cualquier posición (a diferencia de la búsqueda en PowerShell usando F8
o Shift+F8
, que permite buscar las coincidencias solo desde el principio de la línea). La consola de PowerShell debe mostrar el comando anterior correspondiente a la cadena de búsqueda. Las coincidencias de línea se resaltan en el comando.
Si el comando encontrado no le conviene, para continuar buscando en el historial, presione CTRL+R
/CTRL+S
de nuevo. Como resultado, el siguiente comando correspondiente al patrón de búsqueda aparecerá en la pantalla.
Utilizando el F8
clave, puede encontrar el comando en el historial que coincida con el texto de la línea de comando actual. Por ejemplo, ingrese get-
y presione F8
. Se encontrará la última entrada en el historial de comandos que coincida con este texto. Para ir al siguiente comando del historial, presione F8
de nuevo.
También puede utilizar el #
carácter para buscar en el historial de comandos. Por ejemplo, para encontrar el último comando que comienza con Get-WMI, escribe #get-wmi
y presione el Tab
llave. El último comando que coincida con el patrón aparecerá en la consola:
El historial de comandos funciona de la misma manera tanto en Windows PowerShell clásico como en el nuevo PowerShell Core (si ya ha actualizado su versión de PoSh).
Para obtener una lista del comando PoSh anterior en la ventana Notepad.exe, ejecute el comando:
notepad (Get-PSReadLineOption | select -ExpandProperty HistorySavePath)
Para mostrar una lista de comandos en el historial que coinciden con una consulta, puede usar:
Get-History | Select-String -Pattern "Get-"
Administrar el historial de comandos de PowerShell con el módulo PSReadLine
La funcionalidad del historial de comandos en PowerShell 5.0 no está integrada en el marco de administración de Windows en sí, sino que se basa en el PSReadLine módulo, que amplía significativamente la funcionalidad de la consola PowerShell. PSReadLine resalta la sintaxis en la consola, es responsable de seleccionar el texto con su mouse y copiarlo / pegarlo usando CTRL+C
y CTRL+V
. Este módulo en Windows 10 se encuentra en el C: Archivos de programa WindowsPowerShell Modules PSReadline carpeta y se importa automáticamente cuando se inicia la consola de PowerShell.
PSReadLine no se incluye en el instalador independiente de PowerShell 5.0 (o nunca) para versiones anteriores de Windows. Por lo tanto, si desea utilizar la funcionalidad del historial de comandos de PowerShell en versiones anteriores de Windows (Windows 7 / 8.1 y Windows Server 2008R2 / 2012R2), además de instalar Windows Management Framework 5.1, deberá instalar el módulo PSReadLine a través del módulo PackageManagement (anteriormente OneGet) desde el repositorio en línea usando el comando:
Install-Module PSReadLine
Se puede mostrar una lista completa de funciones del módulo PSReadLine para administrar el historial de comandos en PowerShell y las teclas asignadas a ellos con el comando:
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
Key Function Description --- -------- ----------- UpArrow PreviousHistory Replace the input with the previous item in the history DownArrow NextHistory Replace the input with the next item in the history Ctrl+r ReverseSearchHistory Search history backwards interactively Ctrl+s ForwardSearchHistory Search history forward interactively Alt+F7 ClearHistory Remove all items from the command line history (not PowerShell history) F8 HistorySearchBackward Search for the previous item in the history that starts with the current input - like NextHistory if the input is empty Shift+F8 HistorySearchForward Search for the next item in the history that starts with the current input - like NextHistory if the input is empty Unbound ViSearchHistoryBackward Starts a new seach backward in the history. Unbound BeginningOfHistory Move to the first item in the history Unbound EndOfHistory Move to the last item (the current input) in the history
El historial de comandos se puede configurar usando Get-PSReadlineOption y Set-PSReadlineOption cmdlets. La configuración actual de PSReadline se puede ver usando este comando:
Get-PSReadlineOption | select HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
La configuración de los siguientes parámetros de PSReadline puede ser importante para nosotros:
- HistoriaNo Duplicados – determina si se deben guardar los mismos comandos;
- MaximumHistoryCount – el número máximo de comandos almacenados (por defecto se guardan los últimos 4096 comandos);
- HistorySearchCursorMovesToEnd – determina si debe ir al final del comando al realizar la búsqueda;
- HistorySearchCaseSensitive – determina si la búsqueda distingue entre mayúsculas y minúsculas (el historial de comandos de PS no distingue entre mayúsculas y minúsculas de forma predeterminada);
- HistoriaGuardarPath – muestra la ruta al archivo en el que se almacena el comando;
- HistorySaveStyle – determina las peculiaridades de guardar comandos:
- Guardar incrementalmente – los comandos se guardan después de que se ejecutan (por defecto);
- SaveAtSalir – el historial se guarda cuando se cierra la consola de PowerShell;
- No guardar nada – deshabilitar guardar el historial de comandos.
Puede cambiar la configuración del módulo PSReadLine usando el Set-PSReadlineOption. Por ejemplo:
Set-PSReadlineOption -HistorySaveStyle SaveAtExit
Para aumentar la cantidad de comandos de PowerShell guardados en el archivo de registro, ejecute el comando:
Set-PSReadlineOption -MaximumHistoryCount 10000
Entonces, la capacidad de guardar el historial de comandos de PowerShell ejecutados es uno de los argumentos para preferir la consola PoSh a cmd.
¿Cómo borrar los comandos del historial de la consola de PowerShell?
Como explicamos anteriormente, el módulo PSReadline guarda todos los comandos de la consola de PowerShell en un archivo de texto. Sin embargo, en algunos casos, el administrador tiene que ingresar diversa información sensible en la consola de PowerShell (credenciales, contraseñas, direcciones, datos personales, etc.). Por lo tanto, otro administrador de servidor o atacante puede acceder a los datos del historial en un archivo de texto sin formato. Por motivos de seguridad, es posible que deba borrar el historial de los comandos de PowerShell ejecutados o deshabilitar por completo el historial de comandos.
los Borrar historial El cmdlet solo se puede usar para borrar el historial de comandos en memoria de la sesión actual de PowerShell. Solo borra la lista de comandos anteriores que muestra el cmdlet Get-History.
Puede eliminar solo un comando anterior del historial:
Clear-History -count 1 -newest
O borre todos los comandos con un patrón específico:
Clear-History -CommandLine *set-ad*
Para borrar completamente el historial de los comandos de PowerShell anteriores, debe eliminar el archivo ConsoleHost_history.txt en el que están escritos por el módulo PSReadline. Puede obtener la ubicación actual del archivo de historial de PowerShell y eliminarlo con el comando:
Remove-Item (Get-PSReadlineOption).HistorySavePath
Después de eso, cierre la ventana de la consola de PowerShell.
Si desea deshabilitar por completo el almacenamiento del historial de comandos de PowerShell en un archivo de texto, ejecute el comando:
Set-PSReadlineOption -HistorySaveStyle SaveNothing
¿Cómo exportar / importar el historial de comandos de PowerShell a otra sesión?
A veces es conveniente tener el mismo conjunto de comandos de PowerShell de uso frecuente en diferentes computadoras. Puede exportar el historial de comandos actual en su computadora a un archivo xml e importarlo a otras computadoras. También esto se puede hacer copiando el archivo ConsoleHost_history.txt a los perfiles de usuario en las computadoras deseadas.
Para exportar comandos de la sesión actual a un archivo, puede usar el Export-Clixml
cmdlet:
Get-History | Export-Clixml -Path c:pscommands_hist.xml
Para importar el historial de comandos de un archivo a otra sesión PoSh (en una computadora local o en otra computadora):
Add-History -InputObject (Import-Clixml -Path c:pscommands_hist.xml)
Para exportar automáticamente los comandos anteriores a un archivo al final de una sesión de PowerShell, puede vincular el script al evento de terminación de la sesión de PoSh (!! La sesión debe terminar necesariamente con el exit
comando, en lugar de simplemente cerrar la ventana de PowerShell):
$HistFile = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistFile } | out-null
if (Test-path $HistFile) { Import-Clixml $HistFile | Add-History }
Artículos Interesantes
Contenido