Contents

Cómo utilizar el historial de PowerShell

Algo que nos pasa a todos cuando utilizamos cualquier tipo de shell es encontrarnos con la necesidad de consultar comandos escritos minutos o días atrás e incluso volver a ejecutarlos. En GNU/Linux disponemos del comando history, y en la entrada de hoy veremos qué opciones tenemos para trabajar con el historial de PowerShell.

Comandos relacionados con el historial de PowerShell

Como siempre, cuando queremos descubrir cmdlets relacionados con una determinada acción debemos acudir al comando Get-Command, con el que consultar dentro de nuestros módulos disponibles. En este caso queremos interactuar con el historial de PowerShell, por lo que la búsqueda es sencilla:

1
2
3
4
5
6
7
8
PS C:\ Get-Command -Noun history

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-History                                        3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Clear-History                                      3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-History                                        3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Invoke-History                                     3.0.0.0    Microsoft.PowerShell.Core

Consultando el historial de PowerShell

Empecemos el repaso por consultar el histórico de comandos ejecutados. Para tal efecto, como podemos deducir de los cmdlets mostrados anteriormente nos valdremos de Get-History:

/wp-content/uploads/2018/09/Get-History-1.png
Consultar historial de PowerShell

Es importante tener en cuenta algunas cosas acerca de Get-History:

  • Con Get-History unicamente podremos ver los comandos ejecutados en la sesión actual de PowerShell. Esto quiere decir que si cerramos la terminal y volvemos a abrirla veremos un historial vacío.
  • Get-History dispone de un máximo de entradas “retenidas” en el historial que, a partir de PowerShell 3.0 es de 4096 entradas. Se puede consultar y cambiar dicha configuración desde la variable $MaximumHistoryCount.
  • Disponemos de un alias con el que ejecutar este cmdlet: h.

Volviendo a ejecutar entradas del historial

Como hemos visto en el punto anterior con Get-History obtenemos dos parámetros: un ID y el comando ejecutado. Con Invoke-History (y su utilísimo alias r) podemos utilizar esta relación ID-comando para ejecutar comandos de nuestro historial. La ejecución es muy simple:

/wp-content/uploads/2018/09/Invoke-History.png
Ejecutar historial de PowerShell

De no facilitar un Id se ejecutará la última entrada de nuestro historial.

Ejecutando entradas del historial aún mejor

Si bien utilizar el método para ejecutar entradas del historial de PowerShell anteriormente mostrado es rápido (sobretodo utilizando los alias h y r) disponemos de una forma aún mejor de buscar y ejecutar entradas anteriores. Si desde nuestra terminal pulsamos la combinación Ctrl+R podremos acceder a la función de búsqueda de nuestro historial:

/wp-content/uploads/2018/09/CtrlR.png
Búsqueda en historial de PowerShell

Como podemos ver en la captura, dado que yo recordaba haber ejecutado un comando que contenía la palabra “test” al escribirla después de la combinación Ctrl+R se ha rellenado mi línea de comandos actual con dicho comando. Algunas cosas interesantes que saber sobre este método:

  • La búsqueda se realiza de forma inversa, es decir, el primer resultado que aparecerá será el que hayamos ejecutado último.
  • Podemos desplazarnos por la búsqueda con Ctrl+R (seguiremos avanzando de forma inversa) y Ctrl+S (retrocederemos en la búsqueda inversa).
  • Una vez nos hayamos desplazado hasta el comando buscado con apretar la tecla Enter ejecutaremos dicho comando.
  • Los resultados que obtendremos del historial son de la propia sesión de PowerShell que estamos ejecutando o de anteriores, al contrario que con Get-History que únicamente obtendremos resultados de la sesión activa.

Exportando, borrando e importando el historial

Otra de las cosas interesantes que podemos hacer con el historial es transportarlo a otra máquina o guardarlo para examinarlo en otro momento. Esto puede ser interesante si hemos realizado un procedimiento y queremos acabar de documentarlo a posteriori o queremos replicarlo en otra máquina.

Para exportar el historial de PowerShell lo que tenemos que hacer es listarlo con Get-History y pasarlo a csv o xml con Export-Csv o Export-CliXml respectivamente.

1
PS C:\> Get-History | Export-Clixml -Path 'C:\Export\history.xml'

Una vez hecho podemos pasar a borrar el historial de nuestra sesión con Clear-History:

/wp-content/uploads/2018/09/Clear-History.png
Borrar historial de PowerShell

En este caso borramos el historial entero, pero si indicamos un parámetro -Id podemos borrar de forma selectiva una entrada concreta.

Por último vamos a ver cómo importar el historial previamente exportado. Para ello utilizaremos Import-CliXml para importar el archivo previamente exportado y Add-History para poner su contenido en el historial.

/wp-content/uploads/2018/09/ImportarHistory.png
Importar historial de PowerShell