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 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
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.