83 votes

Comment rechercher l'historique des commandes Powershell dans les sessions précédentes ?

J'utilise actuellement Windows 10 avec Powershell 5.1. Il m'arrive souvent de 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.

Lorsque je martèle le je peux parcourir de très nombreuses commandes provenant de très nombreuses sessions, mais lorsque j'essaie de les parcourir en utilisant la touche 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 n'affiche rien des sessions précédentes, comme le montre l'exemple suivant :

C:\Users\Me> Get-History

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

Comment puis-je effectuer une recherche parmi les commandes précédentes que le permet d'utiliser la touche Get-History ou une autre Cmdlet ?

107voto

  • Presse Ctrl + R et commencez à taper, à recherche en amont dans l'histoire de manière interactive. Cela permet de faire correspondre le texte à n'importe quel endroit de la ligne de commande. Appuyer sur Ctrl + R pour trouver le match suivant.
  • Ctrl + S fonctionne comme ci-dessus, mais recherche en avant dans l'histoire. Vous pouvez utiliser Ctrl + R / Ctrl + S pour aller et venir dans les résultats de la recherche.
  • Tapez un texte et appuyez sur F8 . Cette opération permet de rechercher l'élément précédent dans l'historique qui commence par l'entrée actuelle.
  • Shift + F8 fonctionne comme F8 mais cherche à aller de l'avant.

Plus d'informations

Comme @jscott l'a mentionné dans sa réponse, PowerShell 5.1 ou plus dans Windows 10, utilise la fonction PSReadLine pour prendre en charge l'environnement d'édition de commandes. La cartographie complète des clés de ce module peut être récupérée en utilisant Get-PSReadLineKeyHandler cmdlet. Pour afficher tous les mappages de clés liés à l'historique, utilisez la commande suivante :

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

et voici le résultat :

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

83voto

jscott Points 23974

L'historique persistant que vous mentionnez est fourni par PSReadLine . Elle est distincte de la fonction Get-History .

L'historique est stocké dans un fichier défini par la propriété (Get-PSReadlineOption).HistorySavePath . Visualiser ce fichier avec Get-Content (Get-PSReadlineOption).HistorySavePath ou un éditeur de texte, etc. Examinez les options connexes à l'aide de Get-PSReadlineOption . PSReadLine effectue également des recherches dans l'historique via ctrl + r .

En utilisant l'exemple que vous avez donné :

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

5voto

Adam Wemlinger Points 31

Je l'ai 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 }

3voto

Trezore Points 11

J'ai trouvé le texte suivant plus direct :

Get-History

Liste des alias :

Get-Alias

L'histoire y h sont des alias de Obtenir l'historique
L'utilisation de la commande suivante me permet d'obtenir les commandes connexes dans lesquelles le mot "historique" a été utilisé.

h | Select-String -Pattern "history"

Résultats :

PS D:\temp\test> h | select-string -Pattern "history"

Get-History
History
history -count 5 | Add-History
Get-History
History
history -count 5 | Add-History
History
get-help history

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X