Delen via


about_PSReadLine

Korte beschrijving

PSReadLine biedt een verbeterde bewerkingservaring voor opdrachtregels in de PowerShell-console.

Er zijn veel updates voor PSReadLine sinds de versie die wordt geleverd in Windows PowerShell 5.1.

  • v2.3.5 is voor het eerst verzonden in PowerShell 7.4.2 en 7.5.0-preview.3
  • v2.3.4 eerst verzonden in PowerShell 7.4.0-rc.1
  • v2.2.6 is voor het eerst verzonden in PowerShell 7.3.0
  • v2.1.0 is voor het eerst verzonden in PowerShell 7.2.5
  • v2.0.4 is voor het eerst verzonden in PowerShell 7.0.11
  • v2.0.0 wordt geleverd in Windows PowerShell 5.1

Zie about_PSReadLine_Release_Notes voor meer informatie over versieverschillen.

Lange beschrijving

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
  • Voorspellende IntelliSense
  • Dynamische weergave van Help in de console zonder uw plaats op de opdrachtregel te verliezen

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

Notitie

Vanaf PowerShell 7.0 slaat PowerShell het automatisch laden van PSReadLine in Windows over als er een schermlezerprogramma wordt gedetecteerd. Momenteel werkt PSReadLine niet goed met de schermlezers. De standaardweergave en -opmaak van PowerShell 7.0 in Windows werken goed. U kunt de module indien nodig handmatig laden.

Voorspellende IntelliSense

Predictive IntelliSense is een aanvulling op het concept van tabvoltooiing waarmee de gebruiker opdrachten kan voltooien. Hiermee kunnen gebruikers volledige opdrachten detecteren, bewerken en uitvoeren op basis van overeenkomende voorspellingen uit de geschiedenis van de gebruiker en aanvullende domeinspecifieke invoegtoepassingen.

Voorspellende IntelliSense inschakelen

Voorspellende IntelliSense is standaard uitgeschakeld. Voer de volgende opdracht uit om voorspellingen in te schakelen:

Set-PSReadLineOption -PredictionSource History

De parameter PredictionSource kan ook invoegtoepassingen accepteren voor domeinspecifieke en aangepaste vereisten.

Als u Predictive IntelliSense wilt uitschakelen, voert u het volgende uit:

Set-PSReadLineOption -PredictionSource None

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. Op niet-Windows-systemen worden de geschiedenisbestanden opgeslagen op $env:XDG_DATA_HOME/powershell/PSReadLine of $env:HOME/.local/share/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 azgcloud, 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

Feedback en bijdragen aan PSReadLine

PSReadLine op GitHub

U kunt gerust een pull-aanvraag indienen of feedback verzenden op de GitHub-pagina.

Zie ook

  • PSReadLine wordt sterk beïnvloed door de GNU-leeslijnbibliotheek.