about_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 yank/kill-ring
- Перемещение и удаление маркеров PowerShell на основе слов
- Прогнозирование IntelliSense
- Динамическое отображение справки в консоли без потери места в командной строке
ДЛЯ PSReadLine требуется PowerShell 5.1 или более поздней версии. PSReadLine работает с узлом консоли Windows по умолчанию, Терминал Windows и Visual Studio Code. Он не работает в среде сценариев Windows PowerShell.
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 также может принимать подключаемые модули для конкретных доменных и пользовательских требований.
Чтобы отключить 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 пытается отфильтровать конфиденциальную информацию. Все строки команд, содержащие следующие строки, не записываются в файл журнала.
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
Было много обновлений PSReadLine с версии, которая поставляется в Windows PowerShell 5.1.
- Текущий выпуск — 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 ChangeLog.
- PSReadLine 2.3.4
Помимо нескольких исправлений ошибок, этот выпуск включает следующие улучшения:
Прокручиваемая функция ListView для прогнозного IntelliSense
- Автоматически определяет размер в зависимости от размера окна терминала.
- Может содержать до 50 результатов прогнозирования
- Заголовок динамического списка, показывающий количество результатов и текущий источник прогнозирования
Улучшена очистка журнала конфиденциальной информации, чтобы разрешить получение маркера из
az
,gcloud
а такжеkubectl
Улучшение очистки конфиденциальной истории по умолчанию, чтобы разрешить безопасный доступ к свойствам
Добавлена поддержка сложения, уменьшения и заглавной буквы слов
Сделать завершение вкладки показывает результаты, результаты которых
ListItemText
отличаются только по региструПоддерживает команду
<d,i,w>
text-object в режиме редактирования VIИзменение цвета по умолчанию для встроенного прогнозирования на тусклый
Добавление примера в README для преобразования точки кода Юникода в символ Юникода по
Alt+x
Добавьте параметр TerminateOrphanedConsoleApps в Windows, чтобы убить потерянный процесс, подключенный к консоли, который может перепутать чтение из входных данных консоли.
PSReadLine 2.2.6
В этом выпуске функция Predictive IntelliSense включена по умолчанию в зависимости от следующих условий:
- Если виртуальный терминал (VT) поддерживается и PSReadLine работает в PowerShell 7.2 или более поздней версии, для PredictionSource задано значение .
HistoryAndPlugin
- Если VT поддерживается и PSReadLine работает в PowerShell до версии 7.2, то для PredictionSource задано значение .
History
- Если VT не поддерживается, для PredictionSource задано значение .
None
- Если виртуальный терминал (VT) поддерживается и 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:
- Добавление предложений Predictive IntelliSense из журнала команд
- Многие исправления ошибок и усовершенствования API
PSReadLine 2.0.4
В этом выпуске приведены следующие улучшения, добавленные после выпуска 2.0.0:
- Добавлен
-Chord
параметр дляGet-PSReadLineKeyHandler
разрешения поиска определенных ключевых привязок
- Добавлен
Отзывы и участие в PSReadLine
Вы можете отправить запрос на вытягивание или отправить отзыв на странице GitHub.
См. также
PowerShell