PowerShell終了時にコマンド履歴を保存して開始時に復元
# PowerShell終了時の処理を登録
Register-EngineEvent ([System.Management.Automation.PsEngineEvent]::Exiting) -Action {
# historyが保存してあったら読み込む
$savedHistories = @()
if (Test-Path $historyFilePath) {
$savedHistories = Import-Clixml $historyFilePath
}
$currentHistories = history
# 現在のシェルのhistoryと保存してあるhistoryの差分を抽出
$additions = Compare-Object $savedHistories $currentHistories -Property CommandLine | ? {
$_.SideIndicator -eq "=>"
} | % {$_.CommandLine}
$newHistories = $currentHistories | ? {$additions -contains $_.CommandLine}
# いい感じにソートしつつマージを行う
$historiesToSave = ($savedHistories + $newHistories) | sort -Unique -Descending CommandLine | sort StartExecutionTime
# historyを保存
$historiesToSave | Export-Clixml $historyFilePath
Write-Host "see ya!"
} | Out-Null
# historyの復元
if (Test-Path $YourHistoryXmlFilePath) {
Import-Clixml $YourHistoryXmlFilePath | Add-History
}