о PSReadLine
Краткое описание
PSReadLine обеспечивает улучшенные возможности редактирования командной строки в консоли PowerShell.
Подробное описание
PowerShell 7.4 поставляется с PSReadLine 2.3.4. Текущая версия — PSReadLine 2.3.4. Текущую версию PSReadLine можно установить и использовать в Windows PowerShell 5.1 и более поздних версиях. Для работы некоторых функций вам необходимо использовать PowerShell 7.2 или более поздней версии.
PSReadLine предоставляет мощные возможности редактирования командной строки для консоли PowerShell. Он обеспечивает:
- Цвет синтаксиса командной строки
- Визуальная индикация синтаксических ошибок
- Улучшенный многострочный интерфейс (как редактирование, так и история)
- Настраиваемые привязки клавиш
- Режимы Cmd и Emacs
- Множество вариантов конфигурации
- Завершение стиля Bash (необязательно в режиме Cmd, по умолчанию в режиме Emacs)
- Emacs дергает/убивает кольцо
- Перемещение и удаление «слова» на основе токена PowerShell
- Прогнозирующий IntelliSense
- Динамическое отображение справки в консоли без потери места в командной строке.
PSReadLine требует PowerShell 5.1 или более поздней версии. PSReadLine работает с узлом консоли Windows по умолчанию, терминалом Windows и кодом Visual Studio. Он не работает в интегрированной среде сценариев Windows PowerShell.
PSReadLine можно установить из галереи PowerShell. Чтобы установить PSReadLine в поддерживаемой версии PowerShell, выполните следующую команду.
Install-Module -Name PSReadLine -AllowClobber -Force
Примечание
Начиная с PowerShell 7.0, PowerShell пропускает автозагрузку PSReadLine в Windows, если обнаружена программа чтения с экрана. В настоящее время PSReadLine не работает со средствами чтения с экрана. Отрисовка и форматирование PowerShell 7.0 по умолчанию в Windows работают правильно. При необходимости вы можете загрузить модуль вручную.
Прогнозирующий IntelliSense
Predictive IntelliSense — это дополнение к концепции завершения табуляции, которое помогает пользователю успешно выполнять команды. Он позволяет пользователям находить, редактировать и выполнять полные команды на основе сопоставления прогнозов из истории пользователя и дополнительных плагинов, специфичных для домена.
Включить интеллектуальный IntelliSense
По умолчанию функция прогнозирования IntelliSense отключена. Чтобы включить прогнозы, просто запустите следующую команду:
Set-PSReadLineOption -PredictionSource History
Параметр PredictionSource также может принимать плагины для конкретных доменных и пользовательских требований.
Чтобы отключить Predictive 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 пытается отфильтровать конфиденциальную информацию. Любые командные строки, содержащие следующие строки, не записываются в файл истории.
passwordasplaintexttokenapikeysecretPSReadLine 2.2.0 улучшает фильтрацию конфиденциальных данных
- Использует абстрактное синтаксическое дерево PowerShell (AST) анализируемой командной строки для поиска конфиденциальных данных.
Использует список разрешенных безопасных командлетов из модуля SecretManagement, чтобы разрешить добавление этих команд в историю. Белый список содержит:
Get-Secret
Get-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-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.
Улучшите очистку конфиденциальной истории по умолчанию, чтобы обеспечить безопасный доступ к собственности.
Добавлена поддержка увеличения, уменьшения и использования заглавных букв.
Сделать так, чтобы при завершении табуляции отображались результаты, ListItemText которых различаются только по регистру.
Поддерживает команду текстового объекта <d,i,w> в режиме редактирования VI.
Изменить цвет по умолчанию для встроенного прогноза на тусклый
Добавьте в README пример преобразования кодовой точки Юникода в символ Юникода с помощью Alt+x
Добавьте параметр TerminateOrphanedConsoleApps в Windows, чтобы завершить потерянный процесс, подключенный к консоли, который может испортить чтение ввода с консоли.
PSReadLine 2.2.6
В этом выпуске функция Predictive IntelliSense включена по умолчанию в зависимости от следующих условий:
- Если поддерживается виртуальный терминал (VT) и PSReadLine работает в PowerShell 7.2 или более поздней версии, для PredictionSource установлено значение
HistoryAndPlugin
HistoryNone.PSReadLine 2.2.5
Официальный сервисный релиз с небольшими исправлениями ошибок.
PSReadLine 2.2.2
PSReadLine добавила две новые функции прогнозирования IntelliSense:
- Добавлен параметр PredictionViewStyle, позволяющий выбирать новый
ListView.
- Добавлен параметр PredictionViewStyle, позволяющий выбирать новый
CommandPrediction, представленным в PowerShell 7.2, чтобы пользователь мог импортировать модуль прогнозирования, который может отображать предложения из пользовательского источника.Microsoft.PowerShell.Pager для динамической справки.PSReadLine 2.1.0
В этом выпуске реализованы следующие улучшения, добавленные по сравнению с выпуском 2.0.4:
- Добавьте предложения Predictive IntelliSense из истории команд.
PSReadLine 2.0.4
В этом выпуске реализованы следующие улучшения, добавленные по сравнению с выпуском 2.0.0:
- В
Get-PSReadLineKeyHandlerдобавлен параметр-Chord, позволяющий искать определенные сочетания клавиш.
Обратная связь и участие в PSReadLine
PSReadLine на GitHub
Не стесняйтесь отправить запрос на включение или оставить отзыв на странице GitHub.
См. также
- PSReadLine находится под сильным влиянием библиотеки чтения GNU.