Historial de exportación automático al final de la sesión powershell

Puedo exportar mi historia de Powershell usando las escrituras resumidas en la página de Technet en el tema ,

Get-History | Export-Clixml ~\PowerShell\history.xml 

Y puedo cargar automáticamente el historial guardado cuando inicie una sesión de Powershell usando esta línea en mi perfil de powershell,

 Import-Clixml ~\PowerShell\history.xml | Add-History 

Que es grande – casi como usar una cáscara apropiada .

¿Pero hay alguna manera que mi historia se puede guardar automáticamente cuando salgo de la sesión? Estoy usando ConEmu como mi consola.

Este es un enfoque alternativo que persiste en tu historial sin usar un acceso directo de PowerShell diferente.

Tomado de https://software.intel.com/en-us/blogs/2014/06/17/giving-powershell-a-persistent-history-of-commands

Abra PowerShell en modo administrador y descubra la versión de PowerShell que tiene ejecutándose para el siguiente comando:

 $PSVersionTable.PSVersion 

Necesitará una versión superior a 3 para ejecutar esto, Si tiene una versión anterior, actualícela.

Permita que PowerShell importe o utilice scripts incluyendo módulos ejecutando el siguiente comando:

 set-executionpolicy remotesigned 

Instale PsGet e instale los módulos que necesita ejecutando los siguientes comandos:

 (new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex import-module PsGet install-module PsUrl install-module PSReadline 

Cree el siguiente script

 $HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History } # if you don't already have this configured... Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward 

Guarde el archivo como C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 , donde debe reemplazar con el nombre de carpeta correcto en su PC. No olvide cambiar la opción "guardar como tipo" en todos los archivos.

Cierre PowerShell y ábralo de nuevo para que comience a usar el script que guardamos.

De ahora en adelante,

 get-history 

Recuperará los últimos cientos de comandos que escribió, y puede desplazarse entre ellos con las teclas de flecha.

No es perfecto, pero puede usar un acceso directo con un comando de inicio que le dice a PowerShell que guarde todo el historial al salir.

  1. Haga clic con el botón derecho en su escritorio y seleccione Nuevo -> Atajo
  2. Introduzca lo siguiente como la ruta de acceso directo:
 Powershell -NoExit -Command $ histlog = Registro-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent] :: Exiting) -Action {Get-History |  Export-Clixml ~ \ PowerShell \ history.xml}
  1. Elija un nombre para su acceso directo y haga clic en Aceptar .

Si inicia desde este acceso directo, su historial se guardará en ~ \ PowerShell \ history.xml siempre que PowerShell obtenga un evento de salida.

Otra forma de hacerlo, por si acaso es útil para cualquiera.

Powershell ahora almacena el historial de comandos automáticamente en el archivo "% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt"

Para mostrar el historial, he añadido una función a mi perfil como así …

 function h2 { $h = [System.Environment]::ExpandEnvironmentVariables("%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt") cat $h; } 

Ahora sólo puedo escribir "h2" para mostrar el historial completo. No es particularmente inteligente, pero efectivo.