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

В выпуске также улучшена очистка конфиденциальной истории, чтобы разрешить получение маркера с помощью azgcloudсредств командной строки и 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
  • PSReadLine 2.2.5

    Официальный выпуск обслуживания с незначительными исправлениями ошибок.

  • PSReadLine 2.2.2

    • PSReadLine добавил два новых прогнозных компонента IntelliSense:
      • Добавлен параметр PredictionViewStyle , позволяющий выбрать новое ListView.
      • Подключение psReadLine CommandPrediction API, представленные в PowerShell 7.2, позволяют пользователю импортировать модуль прогнозатора, который может отображать предложения из пользовательского источника.
    • Обновлено для использования версии 1.0.0 для динамической справки Microsoft.PowerShell.Pager
    • Улучшена очистка конфиденциальных элементов журнала
    • Много исправлений ошибок и небольших улучшений
  • PSReadLine 2.1.0

    В этом выпуске приведены следующие улучшения, добавленные после выпуска 2.0.4:

    • Добавление предложений Predictive IntelliSense из журнала команд
    • Многие исправления ошибок и усовершенствования API
  • PSReadLine 2.0.4

    В этом выпуске приведены следующие улучшения, добавленные после выпуска 2.0.0:

    • Добавлен -Chord параметр для Get-PSReadLineKeyHandler разрешения поиска определенных ключевых привязок

Отзывы и участие в PSReadLine

PSReadLine на GitHub

Вы можете отправить запрос на вытягивание или отправить отзыв на странице GitHub.

См. также

  • PSReadLine сильно влияет на библиотеку строк чтения GNU.