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 件の予測結果を含めることができます
    • 結果の数と現在の予測ソースを示す動的リスト ヘッダー
  • 機密性の高い履歴スクラブが改善され、トークンの取得がazgcloud可能になります。kubectl

  • 既定の機密履歴スクラブを改善して、安全なプロパティ アクセスを許可する

  • 単語のアップケース、ダウンケース、大文字化のサポートを追加しました

  • タブ補完で、大文字と ListItemText 小文字のみが異なる結果が表示されるようにする

  • VI編集モードでテキストオブジェクトコマンド <d,i,w> をサポート

  • インライン予測の既定の色を dim に変更する

  • UNICODE コード ポイントを Unicode 文字に変換するためのサンプルを README に追加します。 Alt+x

  • Windows で TerminateOrphanedConsoleApps オプションを追加して、コンソール入力からの読み取りを混乱させる可能性がある孤立したコンソール接続プロセスを強制終了します

  • PSReadLine 2.2.6

    このリリースでは、予測 IntelliSense 機能は、次の条件に応じて既定で有効になっています。

    • 仮想ターミナル (VT) がサポートされていて、PowerShell 7.2 以降で実行されている PSReadLine の場合、 PredictionSourceHistoryAndPlugin
    • VT がサポートされ、7.2 より前の PowerShell で PSReadLine が実行されている場合、 PredictionSourceHistory
    • VT がサポートされていない場合、 PredictionSourceNone
  • 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.1.0

    このリリースでは、2.0.4 リリース以降に追加された次の拡張機能がロールアップされます。

    • コマンド履歴から予測 IntelliSense 候補を追加する
    • 多くのバグ修正と API の機能強化
  • PSReadLine 2.0.4

    このリリースでは、2.0.0 リリース以降に追加された次の機能強化がロールアップされます。

    • 特定のキー バインドの -Chord 検索を Get-PSReadLineKeyHandler 許可するパラメーターを追加しました

PSReadLine に関するフィードバックと投稿

GitHub の PSReadLine

GitHub ページで pull request を送信するか、フィードバックを送信してください。

参照