Udostępnij za pośrednictwem


about_PSReadLine

Krótki opis

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

Długi opis

Program PowerShell 7.3 jest dostarczany z programem PSReadLine 2.2.6. Bieżąca wersja to PSReadLine 2.3.4. Bieżąca wersja programu PSReadLine może być zainstalowana i używana w wersji Windows PowerShell 5.1 i nowszej. 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. Oferuje ona następujące możliwości:

  • Kolorowanie składni wiersza polecenia
  • Wizualne wskazanie błędów składniowych
  • 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, domyślne w trybie Emacs)
  • Emacs yank/kill-ring
  • Przenoszenie i usuwanie tokenu opartego na tokenach programu PowerShell
  • Predykcyjna funkcja IntelliSense
  • Dynamiczny ekran Pomocy w konsoli bez utraty miejsca w wierszu polecenia

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

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

Install-Module -Name PSReadLine -AllowClobber -Force

Uwaga

Począwszy od programu PowerShell 7.0, program PowerShell pomija automatyczne ładowanie elementu PSReadLine w systemie Windows, jeśli program czytnika zawartości ekranu zostanie wykryty. Obecnie funkcja PSReadLine nie działa dobrze z czytnikami zawartości ekranu. Domyślne renderowanie i formatowanie programu PowerShell 7.0 w systemie Windows działa prawidłowo. W razie potrzeby możesz ręcznie załadować moduł.

Predykcyjna funkcja IntelliSense

Funkcja IntelliSense predykcyjna to dodatek do koncepcji uzupełniania kart, który pomaga użytkownikowi w pomyślnym ukończeniu poleceń. Umożliwia użytkownikom odnajdywanie, edytowanie i wykonywanie pełnych poleceń na podstawie pasujących przewidywań z historii użytkownika i dodatkowych wtyczek specyficznych dla domeny.

Włączanie funkcji IntelliSense predykcyjnej

Funkcja IntelliSense predykcyjna jest domyślnie wyłączona. Aby włączyć przewidywania, wystarczy uruchomić następujące polecenie:

Set-PSReadLineOption -PredictionSource History

Parametr PredictionSource może również akceptować wtyczki dla wymagań specyficznych dla domeny i niestandardowych.

Aby wyłączyć funkcję Predykcyjnej funkcji IntelliSense, wystarczy uruchomić polecenie:

Set-PSReadLineOption -PredictionSource None

Uwaga

Funkcja IntelliSense predykcyjna jest domyślnie włączona w programie PSReadLine 2.2.6. Aby uzyskać więcej informacji, zobacz historia wersji psReadLine w sekcji Uwagi poniżej.

Powiązania kluczy niestandardowych

Funkcja PSReadLine obsługuje powiązania kluczy niestandardowych 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

Element 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ć $keyelement . Wiele powiązań niestandardowych ignoruje ten argument.

  • $arg - Dowolny argument. Najczęściej jest to argument liczby całkowitej, który użytkownik przekazuje z powiązań kluczy DigitArgument. Jeśli powiązanie nie akceptuje argumentów, uzasadnione jest zignorowanie tego argumentu.

Przyjrzyjmy się przykładowi, który dodaje wiersz polecenia do historii bez jej wykonywania. Jest to przydatne, gdy zdajesz sobie sprawę, że nie pamiętasz o zrobieniu czegoś, 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 edycji wiersza polecenia. Te interfejsy API są udokumentowane w about_PSReadLine_Functions.

Uwagi

Historia poleceń

Funkcja PSReadLine przechowuje 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. W systemach innych niż Windows pliki historii są przechowywane w lokalizacji $env:XDG_DATA_HOME/powershell/PSReadLine lub $env:HOME/.local/share/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 Set-PSReadLineOptionAddToHistoryHandler polecenia cmdlet. Przykład użycia funkcji AddToHistoryHandler można znaleźć w temacie Przykład 7 instrukcji Set-PSReadLineOption.

Program PSReadLine 2.3.4 poprawia filtrowanie poufnych danych

Ulepszono domyślne czyszczenie historii poufnej, aby umożliwić historii bezpieczne uzyskiwanie dostępu 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

Wydanie usprawniło 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

Historia wersji programu PSReadLine

Istnieje wiele aktualizacji programu PSReadLine od wersji dostarczanej w wersji Windows PowerShell 5.1.

  • Bieżąca wersja to PSReadLine 2.3.4
  • Program PowerShell 7.4 jest dostarczany z programem PSReadLine 2.3.4
  • Program PowerShell 7.3 jest dostarczany z programem PSReadLine 2.2.6
  • Program PowerShell 7.2 jest dostarczany z programem PSReadLine 2.1.0
  • Program PowerShell 7.0.11 dostarczany z programem PSReadLine 2.0.4
  • Program PowerShell 5.1 jest dostarczany z programem PSReadLine 2.0.0

Aby uzyskać pełną listę zmian, zobacz dziennik zmian psReadLine.

  • PSReadLine 2.3.4

Oprócz kilku poprawek błędów ta wersja zawiera następujące ulepszenia:

  • Przewijalny widok ListView dla funkcji IntelliSense predykcyjnej

    • Automatycznie usuwa rozmiar na podstawie rozmiaru okna terminalu
    • Może zawierać maksymalnie 50 wyników przewidywania
    • Dynamiczny nagłówek listy pokazujący liczbę wyników i bieżącego źródła przewidywania
  • Ulepszono czyszczenie historii poufnej w celu umożliwienia pobierania tokenu z az, gcloudi kubectl

  • Ulepszanie domyślnej kontroli historii poufnej w celu umożliwienia bezpiecznego dostępu do właściwości

  • Dodano obsługę upcasingu, downcasingu i wielkich liter wyrazów

  • Wykonaj uzupełnianie karty, aby pokazać wyniki, których ListItemText wielkość liter różni się tylko według wielkości liter

  • Obsługuje polecenie <d,i,w> text-object w trybie edycji VI

  • Zmień domyślny kolor przewidywania wbudowanego na dim

  • Dodawanie przykładu do pliku README na potrzeby przekształcania punktu kodu Unicode na znak Unicode Alt+x

  • Dodaj opcję TerminateOrphanedConsoleApps w systemie Windows, aby zabić oddzielony proces dołączony do konsoli, który może zadzierać odczyt z danych wejściowych konsoli

  • PSReadLine 2.2.6

    W tej wersji funkcja Predykcyjnej funkcji IntelliSense jest domyślnie włączona w zależności od następujących warunków:

    • Jeśli usługa Virtual Terminal (VT) jest obsługiwana, a funkcja PSReadLine działa w programie PowerShell 7.2 lub nowszym, wartość PredictionSource jest ustawiona na HistoryAndPlugin
    • Jeśli maszyna wirtualna jest obsługiwana i funkcja PSReadLine działa w programie PowerShell przed 7.2, wartość PredictionSource jest ustawiona na History
    • Jeśli usługa VT nie jest obsługiwana, wartość PredictionSource jest ustawiona na None
  • PSReadLine 2.2.5

    Oficjalna wersja obsługi z drobnymi poprawkami błędów.

  • PSReadLine 2.2.2

    • Funkcja PSReadLine dodała dwie nowe funkcje predykcyjnej funkcji IntelliSense:
      • Dodano parametr PredictionViewStyle , aby umożliwić wybór nowego ListViewelementu .
      • Połączono element PSReadLine z CommandPrediction interfejsami API wprowadzonymi w programie PowerShell 7.2, aby umożliwić użytkownikowi importowanie modułu predyktora, który może renderować sugestie ze źródła niestandardowego.
    • Zaktualizowano program do korzystania z wersji 1.0.0 w celu uzyskania dynamicznej Microsoft.PowerShell.Pager pomocy
    • Ulepszono czyszczenie poufnych elementów historii
    • Wiele poprawek błędów i mniejszych ulepszeń
  • PSReadLine 2.1.0

    Ta wersja zawiera następujące ulepszenia dodane od wersji 2.0.4:

    • Dodawanie sugestii funkcji IntelliSense predykcyjnej z historii poleceń
    • Wiele poprawek błędów i ulepszeń interfejsu API
  • PSReadLine 2.0.4

    Ta wersja zawiera następujące ulepszenia dodane od wersji 2.0.0:

    • Dodano parametr w celu Get-PSReadLineKeyHandler umożliwienia -Chord wyszukiwania określonych powiązań kluczy

Opinie & współtworzenia elementu PSReadLine

Funkcja PSReadLine w usłudze GitHub

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

Zobacz też

  • Element PSReadLine jest silnie pod wpływem biblioteki odczytu GNU.