20

バックグラウンド:

セッション間で履歴を保存できるようになったので、PowerShell の履歴がより便利になりました。

# Run this every time right before you exit PowerShell
get-history -Count $MaximumHistoryCount | export-clixml $IniFileCmdHistory;

現在、PowerShell が重複したコマンドを履歴に保存しないようにしようとしています。

を使用してみましたが、履歴内のすべてのコマンドが「一意」であり、それぞれに異なる ID 番号があるため、Get-Unique機能しません。

4

3 に答える 3

23

Get-Unique には並べ替えられたリストも必要であり、おそらく実行順序を維持したいと思うでしょう。代わりにこれを試してください

Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} |
Export-Clixml "$home\pshist.xml"

このアプローチでは、Group-Object コマンドレットを使用してコマンドの一意のバケットを作成し、次に Foreach-Object ブロックが各バケットの最初の項目を取得します。

ところで、すべてのコマンドを履歴ファイルに保存したい場合は、 $MaximumHistoryCount を設定していない限り、制限値 - 32767 を使用します。

ところで、終了時にこれを自動的に保存したい場合は、2.0でこれを行うことができます

Register-EngineEvent PowerShell.Exiting {
  Get-History -Count 32767 | Group CommandLine |
  Foreach {$_.Group[0]} | Export-CliXml "$home\pshist.xml" } -SupportEvent

次に、ロード時に復元するために必要なのは

Import-CliXml "$home\pshist.xml" | Add-History
于 2009-09-17T14:17:04.837 に答える
3

重複とは直接関係ありませんが、同様に便利なこのAddToHistoryHandlerスクリプト ブロックは$PROFILE、履歴から短く単純なコマンドを保持します。

$addToHistoryHandler = {
    Param([string]$line)
    if ($line.Length -le 3) {
        return $false
    }
    if (@("exit","dir","ls","pwd","cd ..").Contains($line.ToLowerInvariant())) {
        return $false
    }
    return $true
}
Set-PSReadlineOption -AddToHistoryHandler $addToHistoryHandler
于 2018-10-15T14:01:57.137 に答える