about_PSReadLine
Korte beschrijving
PSReadLine biedt een verbeterde bewerkingservaring voor opdrachtregels in de PowerShell-console.
Lange beschrijving
PowerShell 5.1 wordt geleverd met PSReadLine 2.0.0. De huidige versie is PSReadLine 2.3.4. De huidige versie van PSReadLine kan worden geïnstalleerd en gebruikt in Windows PowerShell 5.1 en hoger. Voor sommige functies moet u PowerShell 7.2 of hoger uitvoeren.
PSReadLine biedt een krachtige opdrachtregelbewerking voor de PowerShell-console. Het biedt:
- Syntaxiskleuring van de opdrachtregel
- Een visuele indicatie van syntaxisfouten
- Een betere ervaring met meerdere regels (zowel bewerken als geschiedenis)
- Aanpasbare sleutelbindingen
- Cmd- en Emacs-modi
- Veel configuratieopties
- Voltooiing van Bash-stijl (optioneel in cmd-modus, standaard in emacs-modus)
- Emacs yank/kill-ring
- PowerShell-token op basis van woordverplaatsing en -verwijdering
PSReadLine vereist PowerShell 5.1 of hoger. PSReadLine werkt met de standaard-Windows-consolehost, Windows Terminal en Visual Studio Code. Het werkt niet in windows PowerShell ISE.
PSReadLine kan worden geïnstalleerd vanuit de PowerShell Gallery. Voer de volgende opdracht uit om PSReadLine te installeren in een ondersteunde versie van PowerShell.
Install-Module -Name PSReadLine -AllowClobber -Force
Aangepaste sleutelbindingen
PSReadLine ondersteunt aangepaste sleutelbindingen met behulp van de Set-PSReadLineKeyHandler
cmdlet. De meeste aangepaste sleutelbindingen roepen een van de bindbare functies aan, bijvoorbeeld
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
U kunt een ScriptBlock aan een sleutel binden. De ScriptBlock kan vrijwel alles doen wat u wilt. Enkele nuttige voorbeelden zijn
- de opdrachtregel bewerken
- een nieuw venster openen (bijvoorbeeld Help)
- mappen wijzigen zonder de opdrachtregel te wijzigen
ScriptBlock ontvangt twee argumenten:
$key
- Een [ConsoleKeyInfo] -object dat de sleutel is die de aangepaste binding heeft geactiveerd. Als u dezelfde ScriptBlock verbindt met meerdere sleutels en verschillende acties moet uitvoeren, afhankelijk van de sleutel, kunt u dit controleren$key
. Veel aangepaste bindingen negeren dit argument.$arg
- Een willekeurig argument. Meestal is dit een geheel getalargument dat de gebruiker doorgeeft uit de sleutelbindingen DigitArgument. Als uw binding geen argumenten accepteert, is het redelijk om dit argument te negeren.
Laten we eens kijken naar een voorbeeld waarmee een opdrachtregel aan de geschiedenis wordt toegevoegd zonder deze uit te voeren. Dit is handig wanneer u beseft dat u bent vergeten iets te doen, maar u niet opnieuw wilt invoeren van de opdrachtregel die u al hebt ingevoerd.
$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
U kunt nog veel meer voorbeelden zien in het bestand SamplePSReadLineProfile.ps1
, dat is geïnstalleerd in de modulemap PSReadLine .
De meeste sleutelbindingen gebruiken enkele helperfuncties voor het bewerken van de opdrachtregel. Deze API's worden beschreven in about_PSReadLine_Functions.
Opmerkingen
Opdrachtgeschiedenis
PSReadLine onderhoudt een geschiedenisbestand met alle opdrachten en gegevens die u hebt ingevoerd vanaf de opdrachtregel. De geschiedenisbestanden zijn een bestand met de naam $($host.Name)_history.txt
. Op Windows-systemen wordt het geschiedenisbestand opgeslagen op $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
.
De geschiedenis kan gevoelige gegevens bevatten, inclusief wachtwoorden. PSReadLine probeert gevoelige informatie te filteren. Alle opdrachtregels met de volgende tekenreeksen worden niet naar het geschiedenisbestand geschreven.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 verbetert het filteren van gevoelige gegevens
- Maakt gebruik van de PowerShell Abstract Syntax Tree (AST) van de geparseerde opdrachtregel om te zoeken naar gevoelige gegevens.
- Maakt gebruik van een acceptatielijst met veilige cmdlets uit de SecretManagement-module om toe te staan dat deze opdrachten aan de geschiedenis worden toegevoegd. De acceptatielijst bevat:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
De volgende opdrachten mogen bijvoorbeeld naar het geschiedenisbestand worden geschreven:
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
De volgende opdrachten worden niet naar het geschiedenisbestand geschreven:
$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.
Als er andere opdrachten zijn die u niet naar de geschiedenisbestanden wilt schrijven, kunt u de parameter AddToHistoryHandler van de Set-PSReadLineOption
cmdlet gebruiken. Zie voorbeeld 7 van Set-PSReadLineOption voor een voorbeeld van het gebruik van AddToHistoryHandler.
PSReadLine 2.3.4 verbetert het filteren van gevoelige gegevens
Verbeterde standaard gevoelige geschiedenis wissen zodat de geschiedenis veilige toegang tot eigenschappen kan bevatten.
Wanneer de gevoelige tekenreeks deel uitmaakt van een eigenschapstoegang:
- Als deze lidtoegangsbewerking geen deel uitmaakt van een toewijzing, wordt deze veilig beschouwd
- Als de rechterkant een pijplijn of variabele is, wordt het ook veilig beschouwd als aan de rechterkant
De volgende gebruiksvoorbeelden worden bijvoorbeeld als veilig beschouwd en kunnen worden opgeslagen in de geschiedenis.
$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
De release heeft ook het wissen van gevoelige geschiedenis verbeterd om het ophalen van tokens met behulp van de az
gcloud
, en kubectl
opdrachtregelprogramma's toe te staan.
De volgende gebruiksvoorbeelden worden bijvoorbeeld als veilig beschouwd en kunnen worden opgeslagen in de geschiedenis.
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
Releasegeschiedenis van PSReadLine
Er zijn veel updates voor PSReadLine sinds de versie die wordt geleverd in Windows PowerShell 5.1.
- Huidige release is PSReadLine 2.3.4
- PowerShell 7.4 wordt geleverd met PSReadLine 2.3.4
- PowerShell 7.3 wordt geleverd met PSReadLine 2.2.6
- PowerShell 7.2 wordt geleverd met PSReadLine 2.1.0
- PowerShell 7.0.11 geleverd met PSReadLine 2.0.4
- PowerShell 5.1 wordt geleverd met PSReadLine 2.0.0
Zie het PSReadLine ChangeLog voor een volledige lijst met wijzigingen.
- PSReadLine 2.3.4
Naast verschillende bugfixes bevat deze release de volgende verbeteringen:
Scrollable ListView for Predictive IntelliSense
- De grootte wordt automatisch aangepast op basis van de grootte van het terminalvenster
- Kan maximaal 50 voorspellingsresultaten bevatten
- Dynamische lijstkoptekst met het aantal resultaten en de huidige voorspellingsbron
Verbeterde gevoelige geschiedenis wissen om het ophalen van token van
az
,gcloud
enkubectl
De standaard gevoelige geschiedenis wissen verbeteren om veilige toegang tot eigenschappen toe te staan
Ondersteuning toegevoegd voor het upcasings-, downcasing- en hoofdlettergebruik van woorden
Tabvoltooiing weergeven resultaten waarvan
ListItemText
de verschillen alleen per hoofdletter zijnOndersteunt de opdracht
<d,i,w>
tekstobject in de VI-bewerkingsmodusDe standaardkleur voor inlinevoorspelling wijzigen in dim
Voeg een voorbeeld toe aan README voor het transformeren van Unicode-codepunt naar Unicode-teken door
Alt+x
Voeg de optie TerminateOrphanedConsoleApps in Windows toe om zwevend console-gekoppeld proces te beëindigen dat het lezen van console-invoer kan verpesten
PSReadLine 2.2.6
In deze release is de functie Predictive IntelliSense standaard ingeschakeld, afhankelijk van de volgende voorwaarden:
- Als Virtual Terminal (VT) wordt ondersteund en PSReadLine wordt uitgevoerd in PowerShell 7.2 of hoger, is PredictionSource ingesteld op
HistoryAndPlugin
- Als VT wordt ondersteund en PSReadLine wordt uitgevoerd in PowerShell vóór 7.2, is PredictionSource ingesteld op
History
- Als VT niet wordt ondersteund, wordt PredictionSource ingesteld op
None
- Als Virtual Terminal (VT) wordt ondersteund en PSReadLine wordt uitgevoerd in PowerShell 7.2 of hoger, is PredictionSource ingesteld op
PSReadLine 2.2.5
Officiële onderhoudsrelease met kleine bugfixes.
PSReadLine 2.2.2
- PSReadLine heeft twee nieuwe voorspellende IntelliSense-functies toegevoegd:
- De parameter PredictionViewStyle toegevoegd om de selectie van het nieuwe
ListView
toe te staan. - Verbinding maken ed PSReadLine naar de
CommandPrediction
API's die zijn geïntroduceerd in PowerShell 7.2, zodat een gebruiker een predictormodule kan importeren waarmee de suggesties uit een aangepaste bron kunnen worden weergegeven.
- De parameter PredictionViewStyle toegevoegd om de selectie van het nieuwe
- Bijgewerkt voor gebruik van de versie 1.0.0 van
Microsoft.PowerShell.Pager
voor dynamische help - Het verwijderen van gevoelige geschiedenisitems verbeterd
- Veel bugfixes en kleinere verbeteringen
- PSReadLine heeft twee nieuwe voorspellende IntelliSense-functies toegevoegd:
PSReadLine 2.1.0
Deze release bevat de volgende verbeteringen die zijn toegevoegd sinds de 2.0.4-release:
- Predictive IntelliSense-suggesties toevoegen uit de opdrachtgeschiedenis
- Veel bugfixes en API-verbeteringen
PSReadLine 2.0.4
Deze release bevat de volgende verbeteringen die zijn toegevoegd sinds de release 2.0.0:
-Chord
De parameter toegevoegd om het zoeken naar specifieke sleutelbindingen toe teGet-PSReadLineKeyHandler
staan
Feedback en bijdragen aan PSReadLine
U kunt gerust een pull-aanvraag indienen of feedback verzenden op de GitHub-pagina.