이전 세션에서 Powershell 명령 기록을 검색하는 방법 명령을 탐색 할 수 있지만을 사용하여 검색하려고하면

Powershell 5.1과 함께 현재 Windows 10을 사용합니다. 종종 과거에 명령을 수정 및 / 또는 재실행하기 위해 사용한 명령을 찾고 싶습니다. 필자가 찾고있는 명령이 이전 또는 다른 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을 사용하여 제공 하는 이전 명령을 어떻게 검색 할 수 있습니까?



답변

언급 한 영구 기록은 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*' }


답변

짧은 답변:

  • 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

답변

내 PS 프로필에 있습니다.

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