如何从以前的会话中搜索Powershell命令历史记录


16

我将当前的Windows 10与Powershell 5.1一起使用。通常,我想查找过去使用过的命令来修改和/或重新运行它们。不可避免地,我要查找的命令在以前的或不同的PowerShell窗口/会话中运行。

当我敲键时,我可以浏览来自许多会话的许多命令,但是当我尝试使用进行搜索时Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"},没有任何结果。基本故障排除显示,Get-History以前的会话没有任何显示,如下所示:

C:\Users\Me> Get-History

  Id CommandLine
  -- -----------
   1 Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}

如何搜索密钥使用Get-History或其他Cmdlet 提供的先前命令?

Answers:


23

您提到的永久性历史记录由PSReadLine提供。它与session-bound分开Get-History

历史记录存储在属性定义的文件中(Get-PSReadlineOption).HistorySavePath。使用Get-Content (Get-PSReadlineOption).HistorySavePath,或文本编辑器等查看此文件。使用来检查相关选项Get-PSReadlineOption。PSReadLine还通过ctrl+ 执行历史记录搜索r

使用您提供的示例:

Get-Content (Get-PSReadlineOption).HistorySavePath | ? { $_ -like '*docker cp*' }


3

简短答案:

  • Ctrl+ R,然后开始键入,以交互方式向后搜索历史记录。这与命令行中任何地方的文本匹配。再次按Ctrl+ R查找下一个匹配项。
  • Ctrl+的S工作方式与上述类似,但会在历史记录中向前搜索。您可以使用Ctrl+ R/ Ctrl+ S来回搜索结果。
  • 键入文本,然后按F8。这将搜索历史记录中从当前输入开始的上一个项目。
  • Shift+的F8工作方式与相似F8,但向前搜索。

长答案:

正如@jscott在他/她的答案中提到的那样,Windows 10中的PowerShell 5.1或更高版本使用该PSReadLine模块来支持命令编辑环境。可以使用Get-PSReadLineKeyHandlercmdlet 检索此模块的完整键映射。要查看与历史记录相关的所有键映射,请使用以下命令:

Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}

这是输出:

History functions
=================
Key       Function              Description
---       --------              -----------
Alt+F7    ClearHistory          Remove all items from the command line history (not PowerShell history)
Ctrl+s    ForwardSearchHistory  Search history forward interactively
F8        HistorySearchBackward Search for the previous item in the history that starts with the current input - like
                                PreviousHistory if the input is empty
Shift+F8  HistorySearchForward  Search for the next item in the history that starts with the current input - like
                                NextHistory if the input is empty
DownArrow NextHistory           Replace the input with the next item in the history
UpArrow   PreviousHistory       Replace the input with the previous item in the history
Ctrl+r    ReverseSearchHistory  Search history backwards interactively

1
超级有用!请注意,多次Ctrl+R按将循环显示结果。
Ohad Schneider

1

我的PS个人资料中有这个:

function hist { $find = $args; Write-Host "Finding in full history using {`$_ -like `"*$find*`"}"; Get-Content (Get-PSReadlineOption).HistorySavePath | ? {$_ -like "*$find*"} | Get-Unique | more }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.