J'utilise Windows 10 actuel avec Powershell 5.1. Souvent, je veux rechercher des commandes que j'ai utilisées dans le passé pour les modifier et/ou les réexécuter. Inévitablement, les commandes que je recherche ont été exécutées dans une fenêtre/session PowerShell précédente ou différente.
Quand je martèle le ↑ , je peux parcourir de nombreuses commandes de nombreuses sessions, mais quand j'essaie de les parcourir en utilisant Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}
, Je n'obtiens aucun résultat. Le dépannage de base révèle que Get-History
ne montre rien des sessions précédentes, comme le montre:
C:\Users\Me> Get-History
Id CommandLine
-- -----------
1 Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}
Comment puis-je rechercher parmi les commandes précédentes que le ↑ clé fournit à l'aide de Get-History
ou une autre applet de commande?
L'historique persistant que vous mentionnez est fourni par PSReadLine . Il est distinct de celui lié à la session Get-History
.
L'historique est stocké dans un fichier défini par la propriété (Get-PSReadlineOption).HistorySavePath
. Affichez ce fichier avec Get-Content (Get-PSReadlineOption).HistorySavePath
, ou un éditeur de texte, etc. Inspectez les options associées avec Get-PSReadlineOption
. PSReadLine effectue également des recherches d'historique via ctrl+r.
En utilisant votre exemple fourni:
Get-Content (Get-PSReadlineOption).HistorySavePath | ? { $_ -like '*docker cp*' }
Comme @jscott l'a mentionné dans sa réponse, PowerShell 5.1 ou supérieur dans Windows 10, utilise le module PSReadLine
pour prendre en charge l'environnement d'édition de commandes. Le mappage complet des touches de ce module peut être récupéré en utilisant Get-PSReadLineKeyHandler
applet de commande. Pour afficher tous les mappages de clés liés à l'historique, utilisez la commande suivante:
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
et voici la sortie:
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
J'ai ceci dans mon profil PS:
function hist { $find = $args; Write-Host "Finding in full history using {`$_ -like `"*$find*`"}"; Get-Content (Get-PSReadlineOption).HistorySavePath | ? {$_ -like "*$find*"} | Get-Unique | more }