Windows PowerShell persistent history
Very related to this question is "How do I access my history using the up/down arrows?" The PSReadLine module solves this:
Install-Package PSReadLine
Then add:
Import-Module PSReadLine
To your $profile
.
Well, as a combination of the topicstarter's code and a slightly changed answer by Steven Penny, this is the full piece of code which is working for me
################# Persistent History ############# Save last 200 history items on exit$MaximumHistoryCount = 200 $historyPath = Join-Path (split-path $profile) history.clixml# Hook powershell's exiting event & hide the registration with -supportevent (from nivot.org)Register-EngineEvent -SourceIdentifier powershell.exiting -SupportEvent -Action { Get-History | Export-Clixml $historyPath}.GetNewClosure()# Load previous history, if it existsif ((Test-Path $historyPath)) { Import-Clixml $historyPath | ? {$count++;$true} | Add-History Write-Host -Fore Green "`nLoaded $count history item(s).`n"}# Aliases and functions to make it usefulNew-Alias -Name i -Value Invoke-History -Description "Invoke history alias"Rename-Item Alias:\h original_h -Forcefunction h { Get-History -c $MaximumHistoryCount }function hg($arg) { Get-History -c $MaximumHistoryCount | out-string -stream | select-string $arg }
This is the code I used to use when I persisted my history:
$historyPath = Join-Path (split-path $profile) "history-$(Get-Date -f o).clixml"Register-EngineEvent -SourceIdentifier powershell.exiting -SupportEvent -Action { Get-History | Export-Clixml $historyPath}.GetNewClosure()
The GetNewClosure()
is used to capture the $historyPath
variable IIRC.