about_PSReadLine
Краткое описание
PSReadLine предоставляет улучшенный интерфейс редактирования командной строки в консоли PowerShell.
Было много обновлений PSReadLine с версии, которая поставляется в Windows PowerShell 5.1.
- версия 2.3.5, впервые отправленная в PowerShell 7.4.2 и 7.5.0-preview.3
- Версия 2.3.4 впервые отправлена в PowerShell 7.4.0-rc.1
- Версия 2.2.6, впервые отправленная в PowerShell 7.3.0
- Версия 2.1.0, впервые отправленная в PowerShell 7.2.5
- Версия 2.0.4 впервые отправлена в PowerShell 7.0.11
- Версия 2.0.0 в Windows PowerShell 5.1
Дополнительные сведения о различиях версий см. в about_PSReadLine_Release_Notes.
Полное описание
Текущую версию 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
Пользовательские привязки ключей
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
Вы можете отправить запрос на вытягивание или отправить отзыв на странице GitHub.
См. также
PowerShell