about_PSReadLine

簡単な説明

PSReadLine では、PowerShell コンソールでのコマンド ライン編集エクスペリエンスが向上します。

長い説明

PowerShell 7.3 には PSReadLine 2.2.6 が付属しています。 使用できる新しいバージョンがあります。 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 コンソール ホスト、ウィンドウ ターミナル、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に記載されています。

Notes

コマンド履歴

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.

PSReadLine のリリース履歴

PSReadLine には、Windows PowerShell 5.1 に付属するバージョン以降、多くの更新が行われています。

  • PowerShell 7.3 には PSReadLine 2.2.6 が付属しています
  • PowerShell 7.2.5 には PSReadLine 2.1.0 が付属しています
  • PowerShell 7.0.11 には PSReadLine 2.0.4 が付属しています
  • PowerShell 5.1 には PSReadLine 2.0.0 が付属しています

変更の完全な一覧については、PSReadLine ChangeLog を参照してください。

  • PSReadLine 2.2.6

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

    • 仮想ターミナル (VT) がサポートされていて、PSReadLine が PowerShell 7.2 以降で実行されている場合、PredictionSourceHistoryAndPlugin に設定されます
    • VT がサポートされ、7.2 より前の PowerShell で PSReadLine が実行されている場合、 PredictionSource は に設定されます History
    • VT がサポートされていない場合、 PredictionSource は に設定されます None
  • 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

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

参照

  • PSReadLine は、GNU readline ライブラリの影響を大きく受けます。