清除CMD和PowerShell的输入记录

微软关于doskey命令的官方文档中写的很详细, 比如可以使用doskey /history查看当前CMD会话窗口的命令历史记录, 至于怎么清除历史记录?

话说关闭当前CMD会话窗口, 再打开一个会话窗口, 就调不出来历史记录了。

仅供参考

不知道是不是我Windows版本的原因, 这些方法都没效果:

  1. 改注册表 在注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU下清除默认之外的所有字符串值。 然而我电脑这里只有一个默认的字符串值。
  2. 使用doskey / listsize=0 让当前CMD会话窗口的命令历史记录条数为0, 间接实现doskey /history查不出历史记录的效果。

微软这个清除PowerShell的输入历史记录的文档, 根本没用啊。🙄

在Stack Overflow上也有这个问题: PowerShell’s Clear-History doesn’t clear history, 参考高赞答案得知:

原因
PowerShell有自己的历史机制 (Get-History, Clear-History) , 是独立于主机的, 所以还需要清除主机上存储的命令历史记录。

所以,

单独使用不行
  1. 只使用Clear-History命令

    虽然使用Get-History命令会发现只有一条历史记录, 就是刚刚输入的Clear-History

    但是 , 按几下键, 就会发现以前的输入记录都还在。

  2. 只按Alt + F7

    虽然按几下键, 发现以前的输入记录都没有了。

    但是 , 这时候使用Get-History命令会发现PowerShell把以前的历史记录清楚地列了出来。

合起来使用也不行

然而, 就算合起来使用这两种方法, 比如先按Alt + F7, 再使用Clear-History命令, 似乎这时候输入历史记录中就只有Clear-History这一条刚刚输入的命令了。

但是 , 输入的命令历史记录跨会话保存在文件中, 即所谓的PowerShell自己的历史机制是独立于主机的。主机上存储的命令历史记录文件没有得到清除。

使用PowerShell执行以下命令:

1
(Get-PSReadlineOption).HistorySavePath

会得到PowerShell的输入历史记录存放路径: C:\Users\username\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

打开一看, 历史记录全在这, 删除后, 关闭当前PowerShell, 再重新打开, 就调不出历史纪录了。