stuncloud
12/5/2014 - 8:14 AM

PowerShell終了時にコマンド履歴を保存して開始時に復元

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
}