Partager via


about_PSReadLine

Brève description

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

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

  • Version 2.3.5 d’abord fournie dans PowerShell 7.4.2 et 7.5.0-preview.3
  • Version 2.3.4 d’abord fournie dans PowerShell 7.4.0-rc.1
  • v2.2.6 d’abord livré dans PowerShell 7.3.0
  • Version 2.1.0 d’abord fournie dans PowerShell 7.2.5
  • Version 2.0.4 d’abord fournie dans PowerShell 7.0.11
  • v2.0.0 est fourni dans Windows PowerShell 5.1

Pour plus d’informations sur les différences de version, consultez about_PSReadLine_Release_Notes.

Description longue

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

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 vérifier $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

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.