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 az
gcloud
outils 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
,gcloud
etkubectl
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 uniquementPrend en charge la commande
<d,i,w>
text-object en mode d’édition VIModifier 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
- 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
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.
- Ajout du paramètre PredictionViewStyle pour permettre la sélection du nouveau
- 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 a ajouté deux nouvelles fonctionnalités IntelliSense prédictives :
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 laGet-PSReadLineKeyHandler
recherche de liaisons de clés spécifiques
- Ajout du
Commentaires et contribution à PSReadLine
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.