Exporta automaticamente o histórico no final da sessão do powershell

4

Posso exportar minha história do Powershell usando os scripts descritos na página do Technet sobre o assunto ,

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

e eu posso carregar automaticamente o histórico salvo quando eu iniciar uma sessão do Powershell usando essa linha no meu perfil do powershell,

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

que é ótimo, mas precisa acontecer automaticamente.

Mas há alguma maneira que meu histórico possa ser salvo automaticamente quando eu sair da sessão? Estou usando o ConEmu como meu console.

    
por stib 20.02.2015 / 04:52

3 respostas

1

Aqui está uma abordagem alternativa que persiste seu histórico sem usar um atalho diferente do PowerShell.

Extraído de link

Abra o PowerShell no modo de administrador e descubra qual versão do PowerShell você tem executando o seguinte comando:

$PSVersionTable.PSVersion

Você precisará de uma versão superior a 3 para executar isso. Se você tiver uma versão mais antiga, atualize-a.

Permitir que o PowerShell importe ou use scripts, incluindo módulos, executando o seguinte comando:

set-executionpolicy remotesigned

Instale o PsGet e instale os módulos necessários, executando os seguintes comandos:

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

Crie o seguinte 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

Salve o arquivo como C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 , onde você deve substituir o nome correto da pasta no seu PC. Não se esqueça de alterar a opção "salvar como tipo" para todos os arquivos.

Feche o PowerShell e abra-o novamente para que ele comece a usar o script que salvamos.

De agora em diante,

get-history

Recuperará as últimas centenas de comandos digitados e você poderá rolar entre eles com as teclas de seta.

    
por 23.10.2015 / 14:03
3

Não é perfeito, mas você pode usar um atalho com um comando de início informando ao PowerShell para salvar todo o histórico na saída.

  1. Clique com o botão direito na área de trabalho e selecione Novo - > Atalho
  2. Digite o seguinte como o caminho de atalho:
powershell -NoExit -Command $histlog = Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PsEngineEvent]::Exiting) -Action {Get-History | Export-Clixml ~\PowerShell\history.xml}
  1. Escolha um nome para o seu atalho e clique em OK .

Se você iniciar a partir desse atalho, seu histórico será salvo em ~ \ PowerShell \ history.xml sempre que o PowerShell tiver um evento de saída.

    
por 20.02.2015 / 06:05
2

Outra maneira de fazer isso, caso seja útil para alguém.

O Powershell agora armazena o histórico de comandos automaticamente no arquivo "% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt"

Para exibir o histórico, adicionei uma função ao meu perfil assim ...

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

Agora, posso digitar "h2" para exibir o histórico completo. Não é particularmente inteligente, mas eficaz.

    
por 06.04.2017 / 01:39