次の方法で共有


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 コマンド ライン ツールを使用してトークンを取得できるように、機密性のazgcloud高い履歴スクラブが改善されました。

たとえば、次のユース ケースは安全と見なされ、履歴に保存できます。

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

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

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

  • タブ補完に、大文字と ListItemText 小文字のみが異なる結果を表示させる

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

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

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

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

  • 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 ライブラリの影響を大きく受けます。