清除CMD和PowerShell的输入记录
1 CMD
微软关于doskey命令的官方文档中写的很详细, 比如可以使用doskey /history查看当前CMD会话窗口的命令历史记录, 至于怎么清除历史记录?
话说关闭当前CMD会话窗口, 再打开一个会话窗口, 就调不出来历史记录了。
不知道是不是我Windows版本的原因, 这些方法都没效果:
- 改注册表
在注册表中的
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU下清除默认之外的所有字符串值。 然而我电脑这里只有一个默认的字符串值。 - 使用
doskey / listsize=0让当前CMD会话窗口的命令历史记录条数为0, 间接实现doskey /history查不出历史记录的效果。
2 PowerShell
微软这个清除PowerShell的输入历史记录的文档, 根本没用啊。🙄
在Stack Overflow上也有这个问题: PowerShell’s Clear-History doesn’t clear history, 参考高赞答案得知:
所以,
只使用
Clear-History命令虽然使用
Get-History命令会发现只有一条历史记录, 就是刚刚输入的Clear-History。但是, 按几下
↑键, 就会发现以前的输入记录都还在。只按
Alt + F7虽然按几下
↑键, 发现以前的输入记录都没有了。但是, 这时候使用
Get-History命令会发现PowerShell把以前的历史记录清楚地列了出来。
然而, 就算合起来使用这两种方法, 比如先按Alt + F7, 再使用Clear-History命令, 似乎这时候输入历史记录中就只有Clear-History这一条刚刚输入的命令了。
但是, 输入的命令历史记录跨会话保存在文件中, 即所谓的PowerShell自己的历史机制是独立于主机的。主机上存储的命令历史记录文件没有得到清除。
2.1 解决方法
使用PowerShell执行以下命令:
(Get-PSReadlineOption).HistorySavePath会得到PowerShell的输入历史记录存放路径: C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt。打开一看, 历史记录全在这, 删除后, 关闭当前PowerShell, 再重新打开, 就调不出历史纪录了。
参考 这里, 将自定义的 function 写入 profile.ps1 文件中:
function ch {
Remove-Item -Force AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLineConsoleHost_history.txt
}