Cách tìm kiếm lịch sử lệnh Powershell từ các phiên trước


15

Tôi sử dụng Windows 10 hiện tại với Powershell 5.1. Thông thường, tôi muốn tìm kiếm các lệnh tôi đã sử dụng trong quá khứ để sửa đổi và / hoặc chạy lại chúng. Chắc chắn, các lệnh tôi đang tìm kiếm đã được chạy trong cửa sổ / phiên PowerShell trước đó hoặc khác.

Khi tôi gõ phím, tôi có thể duyệt qua nhiều, nhiều lệnh từ nhiều, nhiều phiên, nhưng khi tôi cố gắng tìm kiếm chúng bằng cách sử dụng Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}, tôi không nhận được kết quả. Khắc phục sự cố cơ bản cho thấy Get-Historykhông hiển thị bất cứ điều gì từ các phiên trước đó, như được hiển thị bởi:

C:\Users\Me> Get-History

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

Làm cách nào tôi có thể tìm kiếm thông qua các lệnh trước đó mà khóa cung cấp bằng cách sử dụng Get-Historyhoặc một Cmdlet khác?

Câu trả lời:


23

Lịch sử liên tục mà bạn đề cập được cung cấp bởi PSReadLine . Nó tách biệt với giới hạn phiên Get-History.

Lịch sử được lưu trữ trong một tập tin được xác định bởi tài sản (Get-PSReadlineOption).HistorySavePath. Xem tệp này với Get-Content (Get-PSReadlineOption).HistorySavePathhoặc trình soạn thảo văn bản, v.v. Kiểm tra các tùy chọn liên quan với Get-PSReadlineOption. PSReadLine cũng thực hiện tìm kiếm lịch sử thông qua ctrl+ r.

Sử dụng ví dụ được cung cấp của bạn:

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


2

Câu trả lời ngắn:

  • Nhấn Ctrl+ Rvà sau đó bắt đầu nhập, để tìm kiếm ngược trong lịch sử tương tác. Điều này phù hợp với văn bản từ bất cứ nơi nào trong dòng lệnh. Nhấn Ctrl+ Rlần nữa để tìm trận đấu tiếp theo.
  • Ctrl+ Shoạt động như trên, nhưng tìm kiếm chuyển tiếp trong lịch sử. Bạn có thể sử dụng Ctrl+ R/ Ctrl+ Sđể qua lại trong kết quả tìm kiếm.
  • Nhập một văn bản và sau đó nhấn F8. Điều này tìm kiếm các mục trước đó trong lịch sử bắt đầu với đầu vào hiện tại.
  • Shift+ F8hoạt động như thế F8, nhưng tìm kiếm về phía trước.

Câu trả lời dài:

Như @jscott đã đề cập trong câu trả lời của anh ấy / cô ấy, PowerShell 5.1 trở lên trong Windows 10, sử dụng PSReadLinemô-đun để hỗ trợ môi trường chỉnh sửa lệnh. Ánh xạ khóa đầy đủ của mô-đun này có thể được lấy bằng cách sử dụng Get-PSReadLineKeyHandlerlệnh ghép ngắn. Để xem tất cả các ánh xạ chính liên quan đến lịch sử, hãy sử dụng lệnh sau:

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

và đây là đầu ra:

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
Siêu hữu ích! Lưu ý rằng nhiều lần Ctrl+Rnhấn sẽ quay vòng qua kết quả.
Ohad Schneider

1

Tôi có cái này trong hồ sơ PS của tôi:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.