Udostępnij za pośrednictwem


about_PSReadLine

Short Description

Funkcja PSReadLine zapewnia ulepszone środowisko edytowania wiersza polecenia w konsoli programu PowerShell.

Od wersji dostarczanej w programie Windows PowerShell 5.1 wprowadzono wiele aktualizacji programu PSReadLine.

  • Wersja 2.3.5 została po raz pierwszy dostarczona w programie PowerShell 7.4.2 i 7.5.0-preview.3
  • Wersja 2.3.4 została po raz pierwszy dostarczona w programie PowerShell 7.4.0-rc.1
  • Wersja 2.2.6 została po raz pierwszy dostarczona w programie PowerShell 7.3.0
  • Wersja 2.1.0 została po raz pierwszy dostarczona w programie PowerShell 7.2.5
  • Wersja 2.0.4 została po raz pierwszy dostarczona w programie PowerShell 7.0.11
  • Wersja 2.0.0 jest dostarczana w programie Windows PowerShell 5.1

Aby uzyskać więcej informacji na temat różnic wersji, zobacz about_PSReadLine_Release_Notes.

Długi opis

Bieżąca wersja programu PSReadLine może być zainstalowana i używana w programie Windows PowerShell 5.1 lub nowszym. W przypadku niektórych funkcji należy uruchomić program PowerShell w wersji 7.2 lub nowszej.

Funkcja PSReadLine zapewnia zaawansowane środowisko edytowania wiersza polecenia dla konsoli programu PowerShell. Zapewniają:

  • Kolorowanie składni wiersza polecenia
  • Wizualne wskazanie błędów składni
  • Lepsze środowisko wielowierszowe (zarówno edytowanie, jak i historia)
  • Dostosowywalne powiązania kluczy
  • Tryby Cmd i Emacs
  • Wiele opcji konfiguracji
  • Uzupełnianie stylu powłoki Bash (opcjonalne w trybie Cmd, ustawienie domyślne w trybie Emacs)
  • Emacs yank/kill-ring
  • Przenoszenie i usuwanie oparte na tokenie programu PowerShell

Funkcja PSReadLine wymaga programu PowerShell 5.1 lub nowszego. Program PSReadLine współpracuje z domyślnym hostem konsoli systemu Windows, Terminal Windows i programem Visual Studio Code. Nie działa w środowisku Windows PowerShell ISE.

Narzędzie PSReadLine można zainstalować z Galeria programu PowerShell. Aby zainstalować program PSReadLine w obsługiwanej wersji programu PowerShell, uruchom następujące polecenie.

Install-Module -Name PSReadLine -AllowClobber -Force

Powiązania kluczy niestandardowych

Funkcja PSReadLine obsługuje niestandardowe powiązania kluczy przy użyciu Set-PSReadLineKeyHandler polecenia cmdlet . Większość niestandardowych powiązań kluczy wywołuje jedną z funkcji możliwych do powiązania, na przykład

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Możesz powiązać element ScriptBlock z kluczem. ScriptBlock może zrobić prawie wszystko, co chcesz. Oto kilka przydatnych przykładów:

  • edytowanie wiersza polecenia
  • otwieranie nowego okna (na przykład pomoc)
  • zmienianie katalogów bez zmieniania wiersza polecenia

Funkcja ScriptBlock otrzymuje dwa argumenty:

  • $key- Obiekt [ConsoleKeyInfo], który jest kluczem, który wyzwolił powiązanie niestandardowe. Jeśli powiążesz ten sam element ScriptBlock z wieloma kluczami i musisz wykonać różne akcje w zależności od klucza, możesz sprawdzić $keypolecenie . Wiele powiązań niestandardowych ignoruje ten argument.

  • $arg - Dowolny argument. Najczęściej jest to argument całkowity, który użytkownik przekazuje z powiązań kluczy DigitArgument. Jeśli powiązanie nie akceptuje argumentów, warto zignorować ten argument.

Przyjrzyjmy się przykładowi, który dodaje wiersz polecenia do historii bez jego wykonywania. Jest to przydatne, gdy zdajesz sobie sprawę, że nie pamiętasz czegoś zrobić, ale nie chcesz ponownie wprowadzać wprowadzonego wiersza polecenia.

$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

Więcej przykładów można zobaczyć w pliku SamplePSReadLineProfile.ps1, który jest zainstalowany w folderze modułu PSReadLine .

Większość powiązań kluczy używa niektórych funkcji pomocnika do edytowania wiersza polecenia. Te interfejsy API są udokumentowane w about_PSReadLine_Functions.

Uwagi

Historia poleceń

Funkcja PSReadLine obsługuje plik historii zawierający wszystkie polecenia i dane wprowadzone z wiersza polecenia. Pliki historii to plik o nazwie $($host.Name)_history.txt. W systemach Windows plik historii jest przechowywany w lokalizacji $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine.

Historia może zawierać poufne dane, w tym hasła. Funkcja PSReadLine próbuje odfiltrować poufne informacje. Wszystkie wiersze polecenia zawierające następujące ciągi nie są zapisywane w pliku historii.

  • password
  • asplaintext
  • token
  • apikey
  • secret

Program PSReadLine 2.2.0 poprawia filtrowanie poufnych danych

  • Używa abstrakcyjnego drzewa składni programu PowerShell (AST) przeanalizowanego wiersza polecenia, aby wyszukać poufne dane.
  • Używa listy dozwolonych bezpiecznych poleceń cmdlet z modułu SecretManagement , aby umożliwić dodawanie tych poleceń do historii. Lista dozwolonych zawiera:
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

Na przykład następujące polecenia mogą być zapisywane w pliku historii:

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

Następujące polecenia nie są zapisywane w pliku historii:

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

Jeśli istnieją inne polecenia, których nie chcesz zapisywać w plikach historii, możesz użyć parametru AddToHistoryHandler polecenia Set-PSReadLineOption cmdlet. Aby zapoznać się z przykładem używania metody AddToHistoryHandler, zobacz Przykład 7 polecenia Set-PSReadLineOption.

Program PSReadLine 2.3.4 poprawia filtrowanie poufnych danych

Ulepszono domyślne czyszczenie historii poufnej, aby umożliwić historii bezpieczny dostęp do właściwości.

Gdy poufny ciąg jest częścią dostępu do właściwości:

  • Jeśli ta operacja dostępu do elementu członkowskiego nie jest częścią przypisania, uważamy ją za bezpieczną
  • W przeciwnym razie, jeśli po prawej stronie znajduje się potok lub zmienna, uważamy ją również za bezpieczną

Na przykład następujące przypadki użycia są uznawane za bezpieczne i można je zapisać w historii.

$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

W tej wersji ulepszono również czyszczenie historii poufnej, aby umożliwić pobieranie tokenu azprzy użyciu narzędzi wiersza polecenia , gcloudi kubectl .

Na przykład następujące przypadki użycia są uznawane za bezpieczne i można je zapisać w historii.

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

Opinie i współtworzenia elementu PSReadLine

Usługa PSReadLine w witrynie GitHub

Możesz przesłać żądanie ściągnięcia lub przesłać opinię na stronie usługi GitHub.

Zobacz też

  • Element PSReadLine ma duży wpływ na bibliotekę readline GNU.