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 I Standard Edition では機能しません。
PSReadLine は、PowerShell ギャラリーからインストールできます。 サポートされているバージョンの PowerShell に PSReadLine をインストールするには、次のコマンドを実行します。
Install-Module -Name PSReadLine -AllowClobber -Force
Note
PowerShell 7.0 以降では、スクリーン リーダー プログラムが検出された場合、PowerShell は Windows での PSReadLine の自動読み込みをスキップします。 現在、PSReadLine はスクリーン リーダーではうまく機能しません。 Windows 上の PowerShell 7.0 の既定のレンダリングと書式設定は正しく機能します。 必要に応じて、モジュールを手動で読み込むことができます。
予測 IntelliSense
予測 IntelliSense は、ユーザーがコマンドを正常に完了するのに役立つタブ補完の概念に追加されています。 これにより、ユーザーは、ユーザーの履歴と追加の doメイン 特定のプラグインからの一致する予測に基づいて、完全なコマンドを検出、編集メイン実行できます。
予測 IntelliSense を有効にする
予測 IntelliSense は既定では無効になっています。 予測を有効にするには、次のコマンドを実行します。
Set-PSReadLineOption -PredictionSource History
PredictionSource パラメーターは、doメイン固有のカスタム要件のプラグインを受け入れることもできます。
予測 IntelliSense を無効にするには、次のコマンドを実行します。
Set-PSReadLineOption -PredictionSource None
Note
PSReadLine 2.2.6 では、予測 IntelliSense が既定で有効になっています。 詳細については、以下の「ノート」 セクションの PSReadLine リリース履歴 を 参照 してください。
カスタム キー バインド
PSReadLine では、コマンドレットを使用したカスタム キー バインドが Set-PSReadLineKeyHandler
サポートされています。 ほとんどのカスタム キー バインドでは、バインド可能な関数の 1 つが呼び出されます(例:
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: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 の使用方法の例については、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
、、gcloud
を使用してトークンをaz
取得できるようになりました。
たとえば、次のユース ケースは安全と見なされ、履歴に保存できます。
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 が付属しています
- PSReadLine 2.0.4 に付属している PowerShell 7.0.11
- 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) がサポートされていて、PowerShell 7.2 以降で実行されている PSReadLine の場合、 PredictionSource は
HistoryAndPlugin - VT がサポートされ、7.2 より前の PowerShell で PSReadLine が実行されている場合、 PredictionSource は
History
- VT がサポートされていない場合、 PredictionSource は
None
- 仮想ターミナル (VT) がサポートされていて、PowerShell 7.2 以降で実行されている PSReadLine の場合、 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 に関するフィードバックと投稿
GitHub ページで pull request を送信するか、フィードバックを送信してください。
参照
- PSReadLine は GNU readline ライブラリの影響を大きく受けます。
PowerShell