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. Dostępne są nowsze wersje. Bieżącą wersję programu PSReadLine można zainstalować i używać w Windows PowerShell 5.1 i nowszych wersjach. 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 (opcjonalnie w trybie Cmd, ustawienie domyślne w trybie Emacs)
- Emacs yank/kill-ring
- Przenoszenie i usuwanie oparte na tokenach programu PowerShell
- Predykcyjna funkcja IntelliSense
- Dynamiczne wyświetlanie 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, terminalem okna i Visual Studio Code. Nie działa w środowisku Windows PowerShell ISE.
Narzędzie PSReadLine można zainstalować z poziomu Galeria programu PowerShell. Aby zainstalować narzędzie 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 zostanie wykryty program czytnika zawartości ekranu. Obecnie narzędzie 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
Predykcyjna funkcja IntelliSense jest dodatkiem do koncepcji uzupełniania tabulacji, która pomaga użytkownikowi w pomyślnym ukończeniu poleceń. Umożliwia ona 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 predykcyjnej funkcji IntelliSense
Predykcyjna funkcja IntelliSense jest domyślnie wyłączona. Aby włączyć przewidywania, uruchom 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ć predykcyjną funkcję IntelliSense, wystarczy uruchomić polecenie:
Set-PSReadLineOption -PredictionSource None
Uwaga
Predykcyjna funkcja IntelliSense 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.
Niestandardowe powiązania kluczy
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, czego potrzebujesz. 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ć wartość$key
. 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
. 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. Żadne wiersze polecenia zawierające następujące ciągi nie są zapisywane w pliku historii.
- hasło
- asplaintext
- token
- apikey
- wpis tajny
Program PSReadLine 2.2.0 poprawia filtrowanie poufnych danych w następujący sposób:
- Używa drzewa składni abstrakcyjnej 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.
Historia wersji programu PSReadLine
Od wersji dostarczanej w wersji Windows PowerShell 5.1 wprowadzono wiele aktualizacji programu PSReadLine.
- Program PowerShell 7.3 jest dostarczany z programem PSReadLine 2.2.6
- Program PowerShell 7.2.5 jest dostarczany z programem PSReadLine 2.1.0
- Program PowerShell 7.0.11 jest 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.2.6
W tej wersji funkcja Predictive 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 i funkcja PSReadLine działa w programie PowerShell 7.2 lub nowszym, właściwość PredictionSource jest ustawiona na
HistoryAndPlugin
- Jeśli maszyna wirtualna jest obsługiwana, a funkcja PSReadLine działa w programie PowerShell przed wersją 7.2, właściwość PredictionSource jest ustawiona na
History
- Jeśli funkcja VT nie jest obsługiwana, właściwość PredictionSource jest ustawiona na wartość
None
- Jeśli usługa Virtual Terminal (VT) jest obsługiwana i funkcja PSReadLine działa w programie PowerShell 7.2 lub nowszym, właściwość PredictionSource jest ustawiona na
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
ListView
elementu . - 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.
- Dodano parametr PredictionViewStyle , aby umożliwić wybór nowego
- 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ń
- Funkcja PSReadLine dodała dwie nowe funkcje predykcyjnej funkcji IntelliSense:
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
- Dodano parametr w celu
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.