もっと詳しく

PowerShellは、驚異的なクロスプラットフォームのタスク自動化ソリューションです。 しかし、正直なところ、PowerShellコマンドラインエクスペリエンスに何かが欠けているように感じますか? PSReadline PowerShellモジュールを利用してみませんか?

PSReadlineには、PowerShellエクスペリエンスをカスタマイズして機能を追加できるコマンドレットが含まれています。 このチュートリアルでは、最新のPowerShellをインストールし、PSReadlineとそのより高度な機能のいくつかを使用する方法について説明します。

準備? PowerShellエクスペリエンスを次のレベルに引き上げるために読んでください!

前提条件

このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、次のことを確認してください。

  • Windows、macOS、またはLinuxのいずれかを実行しているシステム–このチュートリアルではWindows 10を使用しますが、それ以降のバージョンでも機能します。
  • PowerShell 7+ –このチュートリアルではPowerShell7.2.4を使用します

PSReadlineモジュールのインストール

PSReadlineモジュールを利用する前に、まずそれをインストールする必要があります。 また、他のPowerShellモジュールと同様に、 インストールモジュール PSReadlineモジュールをインストールします。

PSReadlineの2.xバージョンは、構文の色付け、カスタムキーバインディングなどの多くの機能を提供します。 PSReadlineリリースノート 機能の完全なリストについては。

1.管理者としてPowerShellを開き、昇格された特権を必要とするコマンドを実行できることを確認します。

2.次に、以下のInstall-Moduleコマンドを実行して、PowerShellギャラリーからPSReadlineモジュールをインストールします。

Install-Module PSReadLine -AllowPrerelease -Force

3.次に、以下のGet-InstalledModuleコマンドを実行して、PSReadlineモジュールがインストールされていることを確認します。

Get-InstalledModule -Name PSReadLine
PSReadlineモジュールのインストールの確認
PSReadlineモジュールのインストールの確認

PowerShell履歴を介したコマンドの検索

PSReadLineモジュールがインストールされたので、PowerShell環境エクスペリエンスを活気づける準備が整いました。 おそらく、同じコマンドをすでに複数回実行しているでしょう。 その場合は、履歴からコマンドを検索できるSet-PSReadLineKeyHandlerコマンドレットを使用して関数を有効にします。

PowerShellの履歴は、PowerShellコンソールで実行するすべてのコマンドを追跡します。 また、PSReadLineモジュールを使用すると、履歴を検索するためのキー(通常は上矢印キーと下矢印キー)を設定できます。

以下の各コマンドを実行して、履歴からコマンドを検索できる機能を有効にします。 これらのコマンドは出力を提供しませんが、上矢印キーと下矢印キーをマップして、履歴内のコマンドの前後検索を実行します。

# Enables Up Arrow key to search backward for commands in the history.
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
# Enables Up Arrow key to search forward for commands in the history.
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

次に、上矢印キーまたは下矢印キーを押し、実行するコマンドが見つかったらEnterキーを押します。

PowerShellは、これまでに入力したコマンドと一致する前または次のコマンドの履歴を検索することに注意してください。 この機能は、長いコマンドや複雑なコマンドを繰り返し実行したくない場合に役立ち、時間を節約できます。

履歴内の検索コマンドへの上矢印キーと下矢印キーのマッピング
履歴内の検索コマンドへの上矢印キーと下矢印キーのマッピング

関数をキーにバインドする

上矢印キーと下矢印キーを、PowerShell履歴に登録されている検索コマンドにマップしました。 しかし、他のキーを別の関数にバインドできますか? はい! ザ Get-PSReadlineKeyHandler バインドされている関数とバインドされていない関数のリストを提供します。

1.パラメータなしで次のコマンドを実行します。これにより、デフォルトでデフォルトのキーボードバインディングが一覧表示されます。

以下は、デフォルトのキーボードバインディングの長いリストのほんの一部です。 このリストは、どのキーがどの関数またはコマンドを呼び出すかについての記憶を更新するのに役立ちます。

デフォルトのキーボードバインディングの表示
デフォルトのキーボードバインディングの表示

2.次に、以下と同じGet-PSReadlineKeyHandlerコマンドを実行しますが、今回は-Unboundパラメーターを追加します。 そうすることで、Get-PSReadlineKeyHandlerコマンドにバインドされていないキーのみを出力するように指示します。

キーまたはキーの組み合わせにマップされていない関数のリストが表示されます。

Get-PSReadlineKeyHandler -Unbound

バインドされていないキーの長いリストも取得していることがわかります。

バインドされていないキーの一覧表示
バインドされていないキーの一覧表示

3.[履歴関数]セクションまで下にスクロールすると、BeginningOfHistoryコマンドがUnboundであることがわかります。

バインドされていない履歴関数の表示
バインドされていない履歴関数の表示

4.次に、次のSet-PSReadlineKeyHandlerコマンドを実行します。このコマンドは、出力を提供しませんが、BeginningOfHistory関数をCtrl+bキーの組み合わせにバインドします。

Ctrl+bキーの組み合わせの中にスペースがないことを確認してください。

キーの組み合わせでは大文字と小文字が区別されることに注意してください。 Ctrl + bキーの組み合わせは、Ctrl+Bと同じではありません。 したがって、オプションで、Ctrl+Bを別の関数にバインドできます。

Set-PSReadLineKeyHandler -Chord Ctrl+b -Function BeginningOfHistory

キーバインディングが複数のキーシーケンスである場合は、キーシーケンスをコロンで区切ります:Ctrl + X:Ctrl+L。

5.最後に、Ctrl + bキーの組み合わせを押すと、PowerShellは、以下に示すように、履歴の最初のコマンドをフェッチします。

バインドされた機能とキーの組み合わせのテスト
バインドされた機能とキーの組み合わせのテスト

コマンド自動提案の有効化

履歴に多くのコマンドがある場合、再実行するコマンドを見つけるのは難しい場合があります。 以前に大量のコマンドを実行したことがある場合は、上矢印キーと下矢印キーを使用してターゲットコマンドを見つけるのが面倒になります。 では、コマンドの自動提案はどのように聞こえますか?

PSReadlineは、コマンド履歴の提案を提供できます。 PSReadLineOption。 この機能は、過去に使用したコマンドに基づいて入力を完了します。

以下のコマンドを実行します。これは出力を提供しませんが、コマンド履歴の提案機能を有効にします。

Set-PSReadLineOption -PredictionSource History

ここで、ターゲットコマンドの一部の入力を開始すると、PowerShellが履歴に基づいて可能なコマンドを提案することがわかります。 インラインの影のテキストは、右矢印キーを押した場合に何が完了するかを示しています。

右矢印キーを押して提案を受け入れ、Enterキーを押してコマンドを実行します。

予測コマンド補完のテスト
予測コマンド補完のテスト

コマンドライン予測子の作成

PowerShellでキーバインディングをカスタマイズすることは、作業をより速く簡単にするための優れた方法です。 PSReadLine 2.xxは、独自のスマートコマンドライン予測子を作成できるようにすることで、この機能をさらに拡張します。

コマンドライン(CLI)予測子を作成するには、独自のコードに予測IntelliSense機能を実装して、コマンドライン(CLI)予測子を作成します。 このCLIプレディクターは、入力時に、作業中のコンテキストに適したコマンドレットまたは関数の提案を提供します。 提案は、コマンド履歴と特定のドメインプラグインに基づいています。

この機能を使用するには、PowerShell7.2以降とPSReadLine2.2.2+が必要です。 PowerShellのデフォルトの5.1バージョンは、この機能をサポートしていません。

コマンドライン予測子(PowerShellモジュール)を作成するには:

1.以下を実行します dotnet 作業ディレクトリに基本的な.NETクラスライブラリプロジェクトを作成するコマンド。 プロジェクトには好きな名前を付けることができますが、このチュートリアルではプロジェクトをSamplePredictorと呼びます。

dotnet new classlib --name SamplePredictor
基本的な.NETクラスライブラリプロジェクトの作成
基本的な.NETクラスライブラリプロジェクトの作成

2.を開きます SamplePredictor.csproj プロジェクトフォルダ内のファイル(SamplePredictor)お好みのテキストエディタで。

SamplePredictor.csprojファイルを開く
開く SamplePredictor.csproj ファイル

3.次に、コンテンツを置き換えます SamplePredictor.csproj 以下のコードでファイルします。

このコードは、このプロジェクトが.NET 6.0を対象とし、PowerShellSDKへの参照が含まれていることをコンパイラーに通知します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.0" />
  </ItemGroup>

</Project>

4.次に、デフォルトを削除します Class1.cs プロジェクトフォルダ内のファイル(SamplePredictor)。

デフォルトのClass1.csファイルの削除
デフォルトのClass1.csファイルの削除

5.新しいを作成します SamplePredictorClass.cs テキストエディタでファイルを作成し、コピーして貼り付けます 含まれているATAGitHubリポジトリのコード

このコードは、予測子をPowerShellに登録して使用できるようにし、モジュールがアンロードされたときに登録を解除します。 同時に、このコードは、予測子が呼び出されたときに「HELLOWORLD」メッセージを返します。

コードブロックの上部近くで宣言された識別子変数に気付くでしょう。 この識別子は、PowerShellが予測子を追跡できるように、予測子を一意に識別するGUIDです。

新しいSamplePredictorClass.csファイルの作成
新しいものを作成する SamplePredictorClass.cs ファイル

6.次に、以下を実行します dotnetビルド プロジェクトフォルダ内のコマンド(SamplePredictor)プロジェクトをビルドします。 このコマンドは、 .dll (PowerShellモジュール)拡張機能。

これ .dll ファイルはにあります bin / Debug / net6.0 プロジェクトフォルダ内(SamplePredictor)。

これで、PowerShellセッションにインポートする必要のあるPowerShellモジュールができました(ステップ8)。

SamplePredictorプロジェクトの構築
SamplePredictorプロジェクトの構築

7.に移動します SamplePredictor / bin / Debug / net6.0 を確認するフォルダ .dll ファイルが存在しています。

.dllファイル(PowerShellモジュール)が存在することを確認する
の確認 .dll ファイル(PowerShellモジュール)が存在します

8.以下のコマンドを実行します。これらのコマンドは出力を提供しませんが、以下を実行します。

  • Set-PSReadLineOptionコマンドレットは、作成した予測子(-PredictionSource HistoryAndPlugin)を使用するようにPowerShellに指示します。
  • Import-Moduleコマンドレットは、モジュールをPowerShellセッションにインポートします。
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Import-Module .binDebugnet6.0SamplePredictor.dll

9.ここで、 Get-PSSubsystem 登録されているコマンド予測子のリストを表示するには、以下のコマンドを使用してください。

Get-PSSubsystem -Kind CommandPredictor

以下に示すように、予測子がリストに表示されます。

登録されたコマンド予測子の表示
登録されたコマンド予測子の表示

10.最後に、プロンプトに何かを入力すると、インラインの影の提案が表示され、予測子が機能していることを確認します。 これで、PowerShellコマンドプレディクターが正常に作成されました。

コマンドライン予測子のテスト(SamplePredictor)
コマンドライン予測子のテスト(SamplePredictor)

結論

このチュートリアルでは、PSReadlineモジュールをインストールし、PowerShellの機能をカスタマイズする方法を学びました。 C#言語を使用してカスタムコマンドプレディクターを作成しました。これは、出力するメッセージまたはその機能を変更することでさらにカスタマイズできます。

これで、PSReadlineモジュールの操作に関する十分な知識が得られました。 しかし、ここで止まらないでください! なぜだめですか ヘルプページを作成する Microsoft Assistance Markup Language(MAML)を使用している予測子の場合ヘルプページを使用して、予測子とその機能の使用方法をユーザーに知らせてください。

The post PowerShellでのPSReadlineの詳細 appeared first on Gamingsym Japan.