about_PSReadLine

Brève description

PSReadLine offre une expérience d’édition de ligne de commande améliorée dans la console PowerShell.

Description longue

PowerShell 7.4 est fourni avec PSReadLine 2.3.4. La version actuelle est PSReadLine 2.3.4. La version actuelle de PSReadLine peut être installée et utilisée sur Windows PowerShell 5.1 et versions ultérieures. Pour certaines fonctionnalités, vous devez exécuter PowerShell 7.2 ou version ultérieure.

PSReadLine offre une expérience puissante d’édition de ligne de commande pour la console PowerShell. Il offre :

  • Coloration de syntaxe de la ligne de commande
  • Indication visuelle des erreurs de syntaxe
  • Une meilleure expérience multiligne (édition et historique)
  • Liaisons de clés personnalisables
  • Modes Cmd et Emacs
  • De nombreuses options de configuration
  • Achèvement du style Bash (facultatif en mode Cmd, par défaut en mode Emacs)
  • Emacs yank/kill-ring
  • Mouvement et suppression basés sur le jeton PowerShell
  • IntelliSense prédictif
  • Affichage dynamique de l’aide dans la console sans perdre votre place sur la ligne de commande

PSReadLine nécessite PowerShell 5.1 ou une version ultérieure. PSReadLine fonctionne avec l’hôte de console Windows par défaut, Terminal Windows et Visual Studio Code. Elle ne fonctionne pas dans Windows PowerShell ISE.

PSReadLine peut être installé à partir de PowerShell Gallery. Pour installer PSReadLine dans une version prise en charge de PowerShell, exécutez la commande suivante.

Install-Module -Name PSReadLine -AllowClobber -Force

Remarque

À compter de PowerShell 7.0, PowerShell ignore le chargement automatique de PSReadLine sur Windows si un programme de lecteur d’écran est détecté. Actuellement, PSReadLine ne fonctionne pas correctement avec les lecteurs d’écran. Le rendu et la mise en forme par défaut de PowerShell 7.0 sur Windows fonctionnent correctement. Vous pouvez charger manuellement le module si nécessaire.

IntelliSense prédictif

IntelliSense prédictif est un ajout au concept de saisie semi-automatique de tabulation qui aide l’utilisateur à terminer correctement les commandes. Il permet aux utilisateurs de découvrir, de modifier et d’exécuter des commandes complètes en fonction des prédictions correspondantes à partir de l’historique de l’utilisateur et d’autres plug-ins spécifiques au domaine.

Activer la fonctionnalité IntelliSense prédictive

La fonctionnalité IntelliSense prédictive est désactivée par défaut. Pour activer les prédictions, exécutez simplement la commande suivante :

Set-PSReadLineOption -PredictionSource History

Le paramètre PredictionSource peut également accepter des plug-ins pour des exigences spécifiques au domaine et personnalisées.

Pour désactiver IntelliSense prédictif, exécutez simplement :

Set-PSReadLineOption -PredictionSource None

Remarque

IntelliSense prédictif est activé par défaut dans PSReadLine 2.2.6. Pour plus d’informations, consultez l’historique des versions PSReadLine dans la section Notes ci-dessous.

Liaisons de clés personnalisées

PSReadLine prend en charge les liaisons de clés personnalisées à l’aide de l’applet de Set-PSReadLineKeyHandler commande. La plupart des liaisons de clés personnalisées appellent l’une des fonctions pouvant être liées, par exemple

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Vous pouvez lier un ScriptBlock à une clé. Le ScriptBlock peut faire presque tout ce que vous voulez. Voici quelques exemples utiles :

  • modifier la ligne de commande
  • ouverture d’une nouvelle fenêtre (par exemple, aide)
  • modifier les répertoires sans modifier la ligne de commande

ScriptBlock reçoit deux arguments :

  • $key - Objet [ConsoleKeyInfo] qui est la clé qui a déclenché la liaison personnalisée. Si vous liez le même ScriptBlock à plusieurs clés et que vous devez effectuer différentes actions en fonction de la clé, vous pouvez case activée $key. De nombreuses liaisons personnalisées ignorent cet argument.

  • $arg - Argument arbitraire. Le plus souvent, il s’agit d’un argument entier transmis par l’utilisateur à partir des liaisons de clé DigitArgument. Si votre liaison n’accepte pas d’arguments, il est raisonnable d’ignorer cet argument.

Examinons un exemple qui ajoute une ligne de commande à l’historique sans l’exécuter. Cela est utile lorsque vous réalisez que vous avez oublié de faire quelque chose, mais ne souhaitez pas entrer à nouveau la ligne de commande que vous avez déjà entrée.

$parameters = @{
    Key = 'Alt+w'
    BriefDescription = 'SaveInHistory'
    LongDescription = 'Save current line in history but do not execute'
    ScriptBlock = {
      param($key, $arg)   # The arguments are ignored in this example

      # GetBufferState gives us the command line (with the cursor position)
      $line = $null
      $cursor = $null
      [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
        [ref]$cursor)

      # AddToHistory saves the line in history, but does not execute it.
      [Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)

      # RevertLine is like pressing Escape.
      [Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
  }
}
Set-PSReadLineKeyHandler @parameters

Vous pouvez voir de nombreux autres exemples dans le fichier SamplePSReadLineProfile.ps1, qui est installé dans le dossier du module PSReadLine .

La plupart des liaisons clés utilisent certaines fonctions d’assistance pour modifier la ligne de commande. Ces API sont documentées dans about_PSReadLine_Functions.

Notes

Historique des commandes

PSReadLine gère un fichier d’historique contenant toutes les commandes et données que vous avez entrées à partir de la ligne de commande. Les fichiers d’historique sont un fichier nommé $($host.Name)_history.txt. Sur les systèmes Windows, le fichier d’historique est stocké sur $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. Sur les systèmes non-Windows, les fichiers d’historique sont stockés à $env:XDG_DATA_HOME/powershell/PSReadLine ou $env:HOME/.local/share/powershell/PSReadLine.

L’historique peut contenir des données sensibles, y compris des mots de passe. PSReadLine tente de filtrer les informations sensibles. Les lignes de commande contenant les chaînes suivantes ne sont pas écrites dans le fichier d’historique.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0 améliore le filtrage des données sensibles

  • Utilise l’arborescence de syntaxe abstraite PowerShell (AST) de la ligne de commande analysée pour rechercher des données sensibles.
  • Utilise une liste verte d’applets de commande sécurisées du module SecretManagement pour permettre à ces commandes d’être ajoutées à l’historique. La liste verte contient :
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

Par exemple, les commandes suivantes sont autorisées à être écrites dans le fichier d’historique :

Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token

Les commandes suivantes ne sont pas écrites dans le fichier d’historique :

$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.

S’il existe d’autres commandes que vous ne souhaitez pas écrire dans les fichiers d’historique, vous pouvez utiliser le paramètre AddToHistoryHandler de l’applet Set-PSReadLineOption de commande. Pour obtenir un exemple d’utilisation de AddToHistoryHandler, consultez l’exemple 7 de Set-PSReadLineOption.

PSReadLine 2.3.4 améliore le filtrage des données sensibles

Amélioration du nettoyage de l’historique sensible par défaut pour permettre à l’historique de contenir un accès sécurisé aux propriétés.

Lorsque la chaîne sensible fait partie d’un accès aux propriétés :

  • Si cette opération d’accès aux membres ne fait pas partie d’une affectation, nous considérons qu’elle est sécurisée
  • Sinon, si le côté droit est un pipeline ou une variable, nous considérons également qu’il est sûr

Par exemple, les cas d’usage suivants sont considérés comme sécurisés et peuvent être enregistrés dans l’historique.

$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token

La version a également amélioré le nettoyage de l’historique sensible pour permettre la récupération du jeton à l’aide des outils en ligne de commande, et kubectl les azgcloudoutils en ligne de commande.

Par exemple, les cas d’usage suivants sont considérés comme sécurisés et peuvent être enregistrés dans l’historique.

kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token

Historique des versions PSReadLine

De nombreuses mises à jour ont été apportées à PSReadLine depuis la version fournie dans Windows PowerShell 5.1.

  • La version actuelle est PSReadLine 2.3.4
  • PowerShell 7.4 est fourni avec PSReadLine 2.3.4
  • PowerShell 7.3 est fourni avec PSReadLine 2.2.6
  • PowerShell 7.2 est fourni avec PSReadLine 2.1.0
  • PowerShell 7.0.11 fourni avec PSReadLine 2.0.4
  • PowerShell 5.1 est fourni avec PSReadLine 2.0.0

Pour obtenir la liste complète des modifications, consultez psReadLine ChangeLog.

  • PSReadLine 2.3.4

Outre plusieurs correctifs de bogues, cette version inclut les améliorations suivantes :

  • ListView à défilement pour IntelliSense prédictif

    • Réajuste automatiquement la taille en fonction de la taille de la fenêtre de terminal
    • Peut contenir jusqu’à 50 résultats de prédiction
    • En-tête de liste dynamique qui affiche le nombre de résultats et la source de prédiction actuelle
  • Amélioration du nettoyage de l’historique sensible pour permettre la récupération du jeton à partir de az, gcloudet kubectl

  • Améliorer le nettoyage de l’historique sensible par défaut pour autoriser l’accès sécurisé aux propriétés

  • Ajout de la prise en charge des mots upcasing, downcasing et capitalisation des mots

  • Faire en sorte que la saisie semi-automatique des onglets affiche les résultats dont ListItemText le cas est différent uniquement

  • Prend en charge la commande <d,i,w> text-object en mode d’édition VI

  • Modifier la couleur par défaut de la prédiction inline en la témant

  • Ajouter un exemple à README pour transformer le point de code Unicode en caractères Unicode par Alt+x

  • Ajouter l’option TerminateOrphanedConsoleApps sur Windows pour tuer le processus orphelin attaché à la console qui peut revenir à la lecture à partir de l’entrée de la console

  • PSReadLine 2.2.6

    Dans cette version, la fonctionnalité IntelliSense prédictive est activée par défaut en fonction des conditions suivantes :

    • Si le terminal virtuel (VT) est pris en charge et que PSReadLine s’exécute dans PowerShell 7.2 ou version ultérieure, PredictionSource est défini sur HistoryAndPlugin
    • Si VT est pris en charge et que PSReadLine s’exécute dans PowerShell avant la version 7.2, PredictionSource est défini sur History
    • Si VT n’est pas pris en charge, PredictionSource est défini sur None
  • PSReadLine 2.2.5

    Version officielle de maintenance avec des correctifs de bogues mineurs.

  • PSReadLine 2.2.2

    • PSReadLine a ajouté deux nouvelles fonctionnalités IntelliSense prédictives :
      • Ajout du paramètre PredictionViewStyle pour permettre la sélection du nouveau ListView.
      • Connecter PSReadLine CommandPrediction avec LES API introduites dans PowerShell 7.2 pour permettre à un utilisateur d’importer un module de prédiction pouvant afficher les suggestions à partir d’une source personnalisée.
    • Mise à jour pour utiliser la version 1.0.0 de l’aide Microsoft.PowerShell.Pager dynamique
    • Amélioration du nettoyage des éléments d’historique sensibles
    • Beaucoup de correctifs de bogues et améliorations plus petites
  • PSReadLine 2.1.0

    Cette version cumule les améliorations suivantes ajoutées depuis la version 2.0.4 :

    • Ajouter des suggestions IntelliSense prédictives à partir de l’historique des commandes
    • De nombreux correctifs de bogues et améliorations de l’API
  • PSReadLine 2.0.4

    Cette version cumule les améliorations suivantes ajoutées depuis la version 2.0.0 :

    • Ajout du -Chord paramètre pour permettre la Get-PSReadLineKeyHandler recherche de liaisons de clés spécifiques

Commentaires et contribution à PSReadLine

PSReadLine sur GitHub

N’hésitez pas à envoyer une demande de tirage (pull request) ou à envoyer des commentaires sur la page GitHub.

Voir aussi

  • PSReadLine est fortement influencé par la bibliothèque de lecture GNU.