Поделиться через


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 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:

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

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

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

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

PSReadLine на GitHub

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

См. также: