about_PSReadLine
Краткое описание
PSReadLine обеспечивает улучшенный интерфейс редактирования командной строки в консоли PowerShell.
Полное описание
PowerShell 7.3 поставляется с PSReadLine 2.2.6. Текущая версия — PSReadLine 2.3.4. Текущую версию PSReadLine можно установить и использовать в Windows PowerShell 5.1 и более поздних версий. Для некоторых функций необходимо использовать PowerShell 7.2 или более поздней версии.
PSReadLine предоставляет мощный интерфейс редактирования командной строки для консоли PowerShell. Консоль предоставляет следующие возможности:
- Цвет синтаксиса командной строки
- Визуальное указание синтаксических ошибок
- Улучшенный многострочный интерфейс (как редактирование, так и журнал)
- Настраиваемые привязки ключей
- Режимы Cmd и Emacs
- Множество параметров конфигурации
- Завершение стиля Bash (необязательно в режиме Cmd, по умолчанию в режиме Emacs)
- Emacs yank/kill-ring
- Перемещение и удаление слов на основе маркера PowerShell
- Прогнозирование IntelliSense
- Динамическое отображение справки в консоли без потери места в командной строке
Для PSReadLine требуется PowerShell 5.1 или более поздней версии. PSReadLine работает с узлом консоли Windows по умолчанию, Терминал Windows и Visual Studio Code. Он не работает в Windows PowerShell ISE.
PSReadLine можно установить из коллекция PowerShell. Чтобы установить PSReadLine в поддерживаемой версии PowerShell, выполните следующую команду.
Install-Module -Name PSReadLine -AllowClobber -Force
Примечание
Начиная с PowerShell 7.0, PowerShell пропускает автоматическую загрузку PSReadLine в Windows при обнаружении программы чтения с экрана. В настоящее время PSReadLine не работает с средствами чтения с экрана. Отрисовка и форматирование PowerShell 7.0 в Windows работает правильно. При необходимости модуль можно загрузить вручную.
Прогнозирование IntelliSense
Прогнозная технология IntelliSense — это дополнение к концепции завершения табуляции, которая помогает пользователю успешно выполнять команды. Она позволяет пользователям обнаруживать, изменять и выполнять полные команды на основе соответствующих прогнозов из журнала пользователя и дополнительных подключаемых модулей, относящихся к предметной области.
Включение прогнозного IntelliSense
По умолчанию прогнозная технология IntelliSense отключена. Чтобы включить прогнозы, просто выполните следующую команду:
Set-PSReadLineOption -PredictionSource History
Параметр PredictionSource также может принимать подключаемые модули для конкретных доменных и пользовательских требований.
Чтобы отключить прогнозную технологию IntelliSense, просто выполните следующую команду:
Set-PSReadLineOption -PredictionSource None
Примечание
Прогнозная технология IntelliSense включена по умолчанию в PSReadLine 2.2.6. Дополнительные сведения см. в журнале выпусков PSReadLine в разделе Примечаний ниже.
Пользовательские привязки ключей
PSReadLine поддерживает пользовательские привязки ключей с помощью командлета Set-PSReadLineKeyHandler
. Большинство пользовательских привязок ключей вызывают одну из привязываемых функций, например
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
ScriptBlock можно привязать к ключу. ScriptBlock может делать практически все, что вы хотите. Ниже приведены некоторые полезные примеры.
- изменение командной строки
- открытие нового окна (например, справка)
- изменение каталогов без изменения командной строки
ScriptBlock получает два аргумента:
$key
— объект [ConsoleKeyInfo] , который является ключом, активировав настраиваемую привязку. Если вы привязываете один и тот же ScriptBlock к нескольким ключам и требуется выполнить разные действия в зависимости от ключа, можно проверка$key
. Многие пользовательские привязки игнорируют этот аргумент.$arg
— произвольный аргумент. Чаще всего это был бы целочисленный аргумент, который пользователь передает из привязок ключа DigitArgument. Если ваша привязка не принимает аргументы, разумно игнорировать этот аргумент.
Рассмотрим пример, который добавляет командную строку в журнал без ее выполнения. Это полезно, если вы понимаете, что забыли что-то сделать, но не хотите повторно вводить командную строку, которую вы уже ввели.
$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
Вы можете увидеть еще много примеров в файле SamplePSReadLineProfile.ps1
, который установлен в папку модуля PSReadLine .
Большинство привязок ключей используют некоторые вспомогательные функции для редактирования командной строки. Эти API описаны в about_PSReadLine_Functions.
Примечания
Журнал команд
PSReadLine поддерживает файл журнала, содержащий все команды и данные, введенные из командной строки. Файлы журнала представляют собой файл с именем $($host.Name)_history.txt
. В системах Windows файл журнала хранится по адресу $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
. В системах, отличных от Windows, файлы журнала хранятся в $env:XDG_DATA_HOME/powershell/PSReadLine
или $env:HOME/.local/share/powershell/PSReadLine
.
Журнал может содержать конфиденциальные данные, включая пароли. PSReadLine пытается отфильтровать конфиденциальную информацию. Все командные строки, содержащие следующие строки, не записываются в файл журнала.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 улучшает фильтрацию конфиденциальных данных
- Использует абстрактное синтаксический дерево PowerShell (AST) проанализированной командной строки для поиска конфиденциальных данных.
- Использует список разрешенных безопасных командлетов из модуля SecretManagement , чтобы разрешить добавление этих команд в журнал. Список разрешений содержит:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Например, в файл журнала можно записать следующие команды:
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
Следующие команды не записываются в файл журнала:
$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.
Если есть другие команды, которые не нужно записывать в файлы журнала, можно использовать параметр AddToHistoryHandler командлета Set-PSReadLineOption
. Пример использования AddToHistoryHandler см. в примере 7 из Set-PSReadLineOption.
PSReadLine 2.3.4 улучшает фильтрацию конфиденциальных данных
Улучшена очистка конфиденциального журнала по умолчанию, чтобы журнал содержал безопасный доступ к свойствам.
Если конфиденциальная строка является частью доступа к свойству:
- Если эта операция доступа к членам не является частью назначения, мы считаем ее безопасной.
- В противном случае, если справа является конвейером или переменной, мы также считаем это безопасным.
Например, следующие варианты использования считаются безопасными и могут быть сохранены в журнале.
$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
В выпуске также улучшена очистка конфиденциального журнала, позволяющая получать маркеры с помощью средств командной az
строки , gcloud
и kubectl
.
Например, следующие варианты использования считаются безопасными и могут быть сохранены в журнале.
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
Журнал выпусков PSReadLine
С версии, которая поставляется в Windows PowerShell 5.1, было много обновлений ДЛЯ PSReadLine.
- Текущий выпуск PSReadLine 2.3.4
- PowerShell 7.4 поставляется с PSReadLine 2.3.4
- PowerShell 7.3 поставляется с PSReadLine 2.2.6
- PowerShell 7.2 поставляется с PSReadLine 2.1.0
- PowerShell 7.0.11 поставляется с PSReadLine 2.0.4
- PowerShell 5.1 поставляется с PSReadLine 2.0.0
Полный список изменений см. в журнале изменений PSReadLine.
- PSReadLine 2.3.4
Помимо нескольких исправлений ошибок, этот выпуск включает следующие улучшения:
Прокручиваемый ListView для прогнозного intelliSense
- Автонастраивает размер в зависимости от размера окна терминала.
- Может содержать до 50 результатов прогнозирования
- Заголовок динамического списка, показывающий количество результатов и текущий источник прогноза
Улучшена очистка конфиденциального журнала для разрешения получения маркера из
az
,gcloud
иkubectl
Улучшение очистки конфиденциального журнала по умолчанию, чтобы разрешить безопасный доступ к свойствам
Добавлена поддержка слова", "downcasing" и "Прописные буквы"
Отображение результатов
ListItemText
, которые отличаются только по региструПоддерживает команду
<d,i,w>
text-object в режиме редактирования VI.Изменение цвета по умолчанию для встроенного прогнозирования на тусклый
Добавление примера в README для преобразования кодовой точки Юникода в символ Юникода
Alt+x
Добавьте параметр TerminateOrphanedConsoleApps в Windows, чтобы завершить потерянный процесс, подключенный к консоли, который может испортить чтение из входных данных консоли.
PSReadLine 2.2.6
В этом выпуске функция прогнозного IntelliSense включена по умолчанию в зависимости от следующих условий:
- Если поддерживается виртуальный терминал, а PSReadLine выполняется в PowerShell 7.2 или более поздней версии, PredictionSource принимает значение
HistoryAndPlugin
. - Если VT поддерживается и PSReadLine работает в PowerShell до версии 7.2, то для PredictionSource задано значение
History
- Если VT не поддерживается, для PredictionSource задано значение
None
- Если поддерживается виртуальный терминал, а PSReadLine выполняется в PowerShell 7.2 или более поздней версии, PredictionSource принимает значение
PSReadLine 2.2.5
Официальный выпуск обслуживания с незначительными исправлениями ошибок.
PSReadLine 2.2.2
- В PSReadLine добавлены две новые функции прогнозной технологии IntelliSense:
- Добавлен параметр PredictionViewStyle , позволяющий выбрать новый
ListView
объект . - Подключение PSReadLine к
CommandPrediction
API, представленным в PowerShell 7.2, позволяет пользователю импортировать модуль прогнозирования, который может визуализировать предложения из пользовательского источника.
- Добавлен параметр PredictionViewStyle , позволяющий выбрать новый
- Обновлено для использования версии 1.0.0 для динамической справки
Microsoft.PowerShell.Pager
- Улучшена очистка конфиденциальных элементов журнала
- Множество исправлений ошибок и небольших улучшений
- В PSReadLine добавлены две новые функции прогнозной технологии IntelliSense:
PSReadLine 2.1.0
Этот выпуск содержит следующие улучшения, добавленные после выпуска 2.0.4:
- Добавление прогнозных предложений IntelliSense из журнала команд
- Множество исправлений ошибок и усовершенствований API
PSReadLine 2.0.4
Этот выпуск содержит следующие улучшения, добавленные после выпуска 2.0.0:
- Добавлен
-Chord
параметр в ,Get-PSReadLineKeyHandler
чтобы разрешить поиск определенных привязок ключей.
- Добавлен
Отзывы & участие в PSReadLine
Вы можете отправить запрос на вытягивание или отправить отзыв на странице GitHub.
См. также:
- На PSReadLine сильно влияет библиотека строк чтения GNU.