背景
PowerShell历史对我来说更有用,因为我有办法在会话中保存历史记录。
# Run this every time right before you exit PowerShell
get-history -Count $MaximumHistoryCount | export-clixml $IniFileCmdHistory;
现在,我正在尝试阻止PowerShell将重复命令保存到我的历史记录中。
我尝试使用Get-Unique
,但这不起作用,因为历史记录中的每个命令都是“唯一的”,因为每个命令都有不同的ID号。
答案 0 :(得分:23)
Get-Unique还需要一个排序列表,我想你可能想要 保留执行顺序。试试这个
Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} |
Export-Clixml "$home\pshist.xml"
此方法使用Group-Object cmdlet创建唯一的命令桶 然后Foreach-Object块只抓取每个桶中的第一个项目。
BTW如果你想将所有命令保存到历史文件中,我会使用限制值 - 32767 - 除非你将$ MaximumHistoryCount设置为。
顺便说一句,如果您想在退出时自动保存,可以在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
答案 1 :(得分:0)
我的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