最近我不得不运行一个命令,不幸的是我要求我在命令行上输入密码。
之后,我用“清除”清除了我的屏幕,但也希望清除命令历史记录,以便在会话历史记录中不会显示违规命令。遗憾的是,Clear-History cmdlet似乎并没有实际执行其文档所声称的内容 - 运行Clear-History似乎对会话历史记录没有任何影响。
我仍然可以在弹出的历史记录菜单中看到以前的命令,并按向上键滚动查看旧命令。这是一个证明问题的屏幕抓图:
我已经使用Get-Command验证了Clear-History确实正在执行预期的内置PowerShell cmdlet。
我尝试了一些变体,例如“Clear-History -count 10 -newest”,都未能显示任何效果。当我指定确切的历史ID时,例如“Clear-History -id 3”,我收到如下错误:
Clear-History : Cannot locate history for Id 3.
即使我可以在屏幕上看到命令#3。
答案 0 :(得分:52)
在Windows 10 上,即使在Alt + F7和clear-history
之后,历史记录和敏感数据也会在将来的会话中再次显示。 solution I found是:
Remove-Item (Get-PSReadlineOption).HistorySavePath
然后,结束当前会话或通过CB's answer
清除它答案 1 :(得分:31)
要清除屏幕显示历史记录( F7 ),您必须按 Alt + F7 。
此历史记录由控制台缓冲区管理,而不是由Clear-History
cmdlet可以清除其历史记录的PowerShell管理。
要编写脚本,请尝试:
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.SendKeys]::Sendwait('%{F7 2}')
答案 2 :(得分:18)
补充CB.'s helpful answer和JVimes's helpful answer:
PowerShell自己的历史记录机制(Get-History
,Clear-History
)是独立于主机的 ,这就是为什么 - 有点出乎意料 - < strong>您还需要单独清除主机的命令历史记录 。
至于控制台主机自己的历史记录功能:
doskey
之前 PSReadline
- 样式历史记录功能 :(见下文):
cmd.exe
控制台窗口中你可以使用doskey /reinstall
,但这在PS中不起作用。 PSReadline
模块随Windows 10上的PowerShell v5一起提供,并将随Windows Server 2016一起提供; 用更复杂的功能替换Clear-History
式的行编辑和命令历史功能;也可以使用PowerShell Gallery(PSv3和PSv4必须首先安装PowerShellGet)来使用它来改进旧的Windows版本/ PS版本(&gt; = v3)版本。
doskey
即可。(Get-PSReadlineOption).HistorySavePath
可用于清除当前会话的历史记录(请注意,v1.2 +还支持 Alt + F7 用于交互式清除当前历史记录。
[Microsoft.PowerShell.PSConsoleReadLine]::ClearHistory()
的默认历史记录保存样式PSReadline
,任何敏感命令已保存您拨打SaveIncrementally
,将重新出现在下一个会话中。[Microsoft.PowerShell.PSConsoleReadLine]::ClearHistory()
- 该设置本身并非“坚持” - 您应该只需拨打Set-PSReadlineOption -HistorySaveStyle SaveAtExit
(除了[Microsoft.PowerShell.PSConsoleReadLine]::ClearHistory()
)而无需删除已保存的历史记录文件,就可以逃脱,在这种情况下,您不会丢失以前会话中保存的历史记录。 然而,在v1.2中,Clear-History
已经破坏了 - 根本没有保存历史记录;见https://github.com/lzybkr/PSReadLine/issues/262 以下高级功能捆绑了清除命令历史记录所需的所有命令(PowerShell本身和控制台),SaveAtExit
- 样式和doskey
- 模块PowerShell控制台窗口: 强>
注意:
因为它(当前)是唯一安全的选项,PSReadline
的已保存历史文件也会被删除,这意味着整个历史记录,包括以前的会话,已被清除
因此,默认情况下会显示确认提示。
PSReadline
答案 3 :(得分:2)
PS C:\> (Get-PSReadlineOption).HistorySavePath
PS C:\> cat (Get-PSReadlineOption).HistorySavePath
PS C:\> Remove-Item (Get-PSReadlineOption).HistorySavePath