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 ギャラリーからインストールできます。 サポートされているバージョンの PowerShell に PSReadLine をインストールするには、次のコマンドを実行します。
Install-Module -Name PSReadLine -AllowClobber -Force
注意
PowerShell 7.0 以降では、スクリーン リーダー プログラムが検出された場合、PowerShell は Windows での PSReadLine の自動読み込みをスキップします。 現在、PSReadLine はスクリーン リーダーではうまく機能しません。 Windows 上の PowerShell 7.0 の既定のレンダリングと書式設定は正しく機能します。 必要に応じて、モジュールを手動で読み込むことができます。
予測 IntelliSense
予測 IntelliSense は、ユーザーがコマンドを正常に完了するのに役立つタブ補完の概念に追加されています。 これにより、ユーザーは、ユーザーの履歴と追加のドメイン固有のプラグインからの一致予測に基づいて、完全なコマンドを検出、編集、実行できます。
予測 IntelliSense を有効にする
予測 IntelliSense は既定では無効になっています。 予測を有効にするには、次のコマンドを実行します。
Set-PSReadLineOption -PredictionSource History
PredictionSource パラメーターは、ドメイン固有およびカスタム要件のプラグインを受け入れることもできます。
予測 IntelliSense を無効にするには、次のコマンドを実行します。
Set-PSReadLineOption -PredictionSource None
注意
PSReadLine 2.2.6 では、予測 IntelliSense が既定で有効になっています。 詳細については、以下の「ノート」セクションの PSReadLine リリース履歴を参照してください。
カスタム キー バインド
PSReadLine では、 コマンドレットを使用したカスタム キー バインドが Set-PSReadLineKeyHandler
サポートされています。 ほとんどのカスタム キー バインドでは、 バインド可能な関数のいずれかを呼び出します(例:
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
ScriptBlock をキーにバインドできます。 ScriptBlock は、必要に応じてほとんど何でも実行できます。 便利な例としては、次のようなものがあります。
- コマンド ラインを編集する
- 新しいウィンドウを開く (ヘルプなど)
- コマンド ラインを変更せずにディレクトリを変更する
ScriptBlock は、次の 2 つの引数を受け取ります。
$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
PSReadLine モジュール フォルダーにインストールされている ファイル SamplePSReadLineProfile.ps1
には、さらに多くの例があります。
ほとんどのキー バインドでは、コマンド ラインの編集に一部のヘルパー関数が使用されます。 これらの API については、 about_PSReadLine_Functionsに記載されています。
メモ
コマンド履歴
PSReadLine は、コマンド ラインから入力したすべてのコマンドとデータを含む履歴ファイルを保持します。 履歴ファイルは という名前のファイルです $($host.Name)_history.txt
。 Windows システムでは、履歴ファイルは に $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
格納されます。 Windows 以外のシステムでは、履歴ファイルは または $env:HOME/.local/share/powershell/PSReadLine
に$env:XDG_DATA_HOME/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 の使用方法の例については、「Set-PSReadLineOption の例 7」を参照してください。
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
また、このリリースでは、および kubectl
コマンド ライン ツールを使用してトークンを取得できるように、機密性のaz
gcloud
高い履歴スクラブが改善されました。
たとえば、次のユース ケースは安全と見なされ、履歴に保存できます。
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
このリリースには、いくつかのバグ修正に加えて、次の機能強化が含まれています。
予測 IntelliSense のスクロール可能な ListView
- ターミナル ウィンドウのサイズに基づいてサイズを自動調整します
- 最大 50 件の予測結果を含めることができます
- 結果の数と現在の予測ソースを示す動的リスト ヘッダー
、、および から
az
gcloud
トークンを取得できるように、機密性の高い履歴スクラブが改善されましたkubectl
プロパティへの安全なアクセスを許可するように、既定の機密履歴スクラブを改善する
単語のアップケース、ダウンケース、大文字化のサポートを追加しました
タブ補完に、大文字と
ListItemText
小文字のみが異なる結果を表示させるVI編集モードでのテキストオブジェクトコマンド
<d,i,w>
をサポートインライン予測の既定の色を dim に変更する
Unicode コード ポイントを Unicode 文字に変換するためのサンプルを README に追加します。
Alt+x
Windows で TerminateOrphanedConsoleApps オプションを追加して、コンソール入力からの読み取りを混乱させる可能性がある孤立したコンソール接続プロセスを強制終了します
PSReadLine 2.2.6
このリリースでは、予測 IntelliSense 機能は、次の条件に応じて既定で有効になっています。
- 仮想ターミナル (VT) がサポートされていて、PSReadLine が PowerShell 7.2 以降で実行されている場合、PredictionSource は
HistoryAndPlugin
に設定されます - VT がサポートされ、7.2 より前の PowerShell で PSReadLine が実行されている場合、 PredictionSource は に設定されます
History
- VT がサポートされていない場合、 PredictionSource は に設定されます
None
- 仮想ターミナル (VT) がサポートされていて、PSReadLine が PowerShell 7.2 以降で実行されている場合、PredictionSource は
PSReadLine 2.2.5
軽微なバグ修正を含む公式サービス リリース。
PSReadLine 2.2.2
- PSReadLine では、次の 2 つの新しい予測 IntelliSense 機能が追加されました。
- 新しい
ListView
を選択できるように PredictionViewStyle パラメーターを追加しました。 - PowerShell 7.2 で導入された API に
CommandPrediction
PSReadLine を接続して、ユーザーがカスタム ソースから提案をレンダリングできる予測モジュールをインポートできるようにします。
- 新しい
- 動的ヘルプのために の 1.0.0 バージョン
Microsoft.PowerShell.Pager
を使用するように更新されました - 機密履歴項目のスクラブを改善しました
- 多数のバグ修正と小さな機能強化
- PSReadLine では、次の 2 つの新しい予測 IntelliSense 機能が追加されました。
PSReadLine 2.1.0
このリリースでは、2.0.4 リリース以降に追加された次の機能強化がロールアップされます。
- コマンド履歴から予測 IntelliSense 候補を追加する
- 多くのバグ修正と API の機能強化
PSReadLine 2.0.4
このリリースでは、2.0.0 リリース以降に追加された次の機能強化がロールアップされます。
- 特定のキー バインドを
-Chord
検索できるように、 パラメーターを にGet-PSReadLineKeyHandler
追加しました
- 特定のキー バインドを
PSReadLine に貢献するフィードバック &
Pull Request を送信するか、GitHub ページでフィードバックを送信してください。
参照
- PSReadLine は GNU readline ライブラリの影響を大きく受けます。