PowerShell历史记录:如何防止重复命令?

dre*_*mac 18 powershell command-line history

背景:

PowerShell历史对我来说更有用,因为我有办法在会话中保存历史记录.

# Run this every time right before you exit PowerShell
get-history -Count $MaximumHistoryCount | export-clixml $IniFileCmdHistory;
Run Code Online (Sandbox Code Playgroud)

现在,我试图阻止PowerShell将重复命令保存到我的历史记录中.

我尝试使用Get-Unique,但这不起作用,因为历史记录中的每个命令都是"唯一的",因为每个命令都有不同的ID号.

Kei*_*ill 23

Get-Unique还需要一个排序列表,我假设您可能希望保留执行顺序.试试这个

Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} |
Export-Clixml "$home\pshist.xml"
Run Code Online (Sandbox Code Playgroud)

此方法使用Group-Object cmdlet创建唯一的命令桶,然后Foreach-Object块只抓取每个桶中的第一个项目.

顺便说一句,如果你想将所有命令保存到历史文件中,我会使用限制值 - 32767 - 除非你将$ MaximumHistoryCount设置为.

顺便说一下,如果你想在退出时自动保存它,你可以在2.0上这样做

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

然后在负载恢复时你需要的就是

Import-CliXml "$home\pshist.xml" | Add-History
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的精彩提示,基思.不过我会做一个小调整:`if(Test-path $ MyHistoryFile){Import-CliXml $ MyHistoryFile | 添加历史记录}这可以避免在编辑一个配置文件后第一次启动PowerShell时出现的错误消息. (3认同)

div*_*nex 6

以下命令适用于Windows 10中的PowerShell(已在v.1803中测试)。该选项在此处记录

Set-PSReadLineOption –HistoryNoDuplicates:$True
Run Code Online (Sandbox Code Playgroud)

实际上,使用以下命令(例如,保存在快捷方式中)调用PowerShell将打开具有历史记录且无重复的PowerShell

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command Set-PSReadLineOption –HistoryNoDuplicates:$True
Run Code Online (Sandbox Code Playgroud)

  • 只需将“Set-PSReadLineOption -HistoryNoDuplicates”放入我的“$PROFILE”中即可。不确定是否是早期版本的问题。 (3认同)