วิธีค้นหาประวัติคำสั่ง 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 อื่นได้อย่างไร

คำตอบ:


23

ประวัติความเป็นมาถาวรคุณพูดถึงให้บริการโดยPSReadLine Get-Historyมันจะแยกจากเซสชั่นที่ถูกผูกไว้

(Get-PSReadlineOption).HistorySavePathประวัติศาสตร์จะถูกเก็บไว้ในแฟ้มที่กำหนดไว้แล้ว ดูไฟล์นี้ด้วยGet-Content (Get-PSReadlineOption).HistorySavePathหรือแก้ไขข้อความ ฯลฯ Get-PSReadlineOptionตรวจสอบตัวเลือกที่เกี่ยวข้องกับ PSReadLine ยังดำเนินการค้นหาประวัติศาสตร์ผ่าน+ctrlr

ใช้ตัวอย่างที่คุณให้มา:

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


3

คำตอบสั้น ๆ :

  • กดCtrl+ Rแล้วเริ่มพิมพ์เพื่อค้นหาย้อนหลังในประวัติศาสตร์แบบโต้ตอบ สิ่งนี้ตรงกับข้อความจากที่ใดก็ได้ในบรรทัดคำสั่ง กดCtrl+ Rอีกครั้งเพื่อค้นหาการแข่งขันถัดไป
  • Ctrl+ Sทำงานเหมือนด้านบน แต่ค้นหาในประวัติศาสตร์ คุณสามารถใช้Ctrl+ R/ Ctrl+ Sเพื่อกลับไปกลับมาในผลการค้นหา
  • F8พิมพ์ข้อความแล้วกด สิ่งนี้จะค้นหารายการก่อนหน้าในประวัติที่เริ่มต้นด้วยอินพุตปัจจุบัน
  • Shift+ F8ทำงานเหมือนF8แต่ค้นหาไปข้างหน้า

คำตอบยาว:

ดังที่ @jscott ได้กล่าวถึงไว้ใน / คำตอบของเขา / เธอ PowerShell 5.1 หรือสูงกว่าใน Windows 10 ใช้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 }

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.