title: Windows PowerShell persistent history
body: <p>I found this excellent looking method of <a href="http://lopsa.org/content/persistent-history-powershell" rel="nofollow noreferrer">persisting history in Windows PowerShell</a>.</p>
  
  <pre class="lang-sh prettyprint-override"><code># Persistent History
  # Save last 200 history items on exit
  $MaximumHistoryCount = 200
  $historyPath = Join-Path (split-path $profile) history.clixml
  
  # Hook powershell's exiting event &amp; hide the registration with -supportevent (from nivot.org)
  Register-EngineEvent -SourceIdentifier powershell.exiting -SupportEvent -Action {
      Get-History -Count $MaximumHistoryCount | Export-Clixml (Join-Path (split-path $profile) history.clixml)
  }
  
  # Load previous history, if it exists
  if ((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 useful
  New-Alias -Name i -Value Invoke-History -Description "Invoke history alias"
  Rename-Item Alias:\h original_h -Force
  function h { Get-History -c  $MaximumHistoryCount }
  function hg($arg) { Get-History -c $MaximumHistoryCount | out-string -stream | select-string $arg }
  </code></pre>
  
  <p>However, when I paste this into my $PROFILE and restart PowerShell I get the
  following error:</p>
  
  <pre>
  Register-EngineEvent : Missing an argument for parameter 'Action'. Specify a parameter of type
  'System.Management.Automation.ScriptBlock' and try again.
  At D:\path\to\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:20 char:73
  + Register-EngineEvent -SourceIdentifier powershell.exiting -SupportEvent -Action
  +                                                                         ~~~~~~~
      + CategoryInfo          : InvalidArgument: (:) [Register-EngineEvent], ParameterBindingException
      + FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.RegisterEngineEventCommand
  </pre>