Önceki oturumlardan Powershell komut geçmişi nasıl aranır


17

Geçerli Windows 10'u Powershell 5.1 ile kullanıyorum. Genellikle, geçmişte kullandığım komutları değiştirmek ve / veya yeniden çalıştırmak için bakmak istiyorum. Kaçınılmaz olarak, aradığım komutlar önceki veya farklı bir PowerShell penceresinde / oturumunda çalıştırıldı.

Ben çekiç zaman anahtarı, ben birçok, birçok oturumlardan çok, çok komutları gezinebilir, ancak kullanarak onların aracılığıyla aramaya çalıştığınızda Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}, herhangi bir sonuç almıyorum. Temel sorun giderme Get-History, aşağıdaki gibi gösterildiği gibi önceki oturumlardan hiçbir şey göstermediğini gösterir:

C:\Users\Me> Get-History

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

Anahtarın sağladığı önceki komutları Get-Historyveya başka bir Cmdlet'i nasıl arayabilirim ?

Yanıtlar:


24

Bahsettiğiniz kalıcı geçmiş PSReadLine tarafından sağlanır . Oturuma bağlı olandan ayrıdır Get-History.

Geçmiş, özellik tarafından tanımlanan bir dosyada saklanır (Get-PSReadlineOption).HistorySavePath. Bu dosyayı ile Get-Content (Get-PSReadlineOption).HistorySavePathveya bir metin düzenleyici vb. İle görüntüleyin. İle ilgili seçenekleri inceleyin Get-PSReadlineOption. PSReadLine ayrıca ctrl+ aracılığıyla geçmiş aramaları gerçekleştirir r.

Sağladığınız örneği kullanarak:

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


4

Kısa cevap:

  • Ctrl+ Düğmesine basın Rve sonra geçmişte etkileşimli olarak geriye doğru arama yapmak için, yazmaya başlayın . Bu, komut satırının herhangi bir yerindeki metinle eşleşir. Sonraki eşleşmeyi bulmak için Ctrl+ tuşuna Rtekrar basın .
  • Ctrl+ Syukarıdaki gibi çalışır, ancak geçmişte ileriye doğru arama yapar . Arama sonuçlarında ileri ve geri gitmek için Ctrl+ R/ Ctrl+ tuşlarını kullanabilirsiniz S.
  • Bir metin yazın ve tuşuna basın F8. Bu, geçmişte geçerli girdiyle başlayan önceki öğeyi arar.
  • Shift+ F8çalışır F8, ancak ileriye bakar.

Uzun cevap:

Yanıtında @jscott'un belirttiği gibi, Windows 10'da PowerShell 5.1 veya üstü, PSReadLinekomut düzenleme ortamını desteklemek için modülü kullanır . Bu modülün tam anahtar eşlemesi Get-PSReadLineKeyHandlercmdlet kullanılarak alınabilir . Geçmişle ilgili tüm anahtar eşlemelerini görüntülemek için aşağıdaki komutu kullanın:

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

ve işte çıktı:

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
Süper kullanışlı! Çoklu Ctrl+Rbasışların sonuçlar arasında dolaşacağını unutmayın .
Ohad Schneider

1

PS profilimde bu var:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.