コマンドレットの概要

コマンドレットは、PowerShell 環境で使用される軽量のコマンドです。 PowerShell ランタイムは、コマンドラインで指定されたオートメーションスクリプトのコンテキスト内でこれらのコマンドレットを呼び出します。 Powershell ランタイムでは、PowerShell Api を使用してプログラムで呼び出すこともできます。

コマンドレット

コマンドレットによってアクションが実行され、通常は、パイプラインの次のコマンドに Microsoft .NET オブジェクトが返されます。 コマンドレットは、PowerShell のパイプラインセマンティクスに関与する単一のコマンドです。 これには、バイナリ (C#) コマンドレット、高度なスクリプト関数、CDXML、ワークフローが含まれます。

この SDK ドキュメントでは、C# で記述されたバイナリコマンドレットを作成する方法について説明します。 スクリプトベースのコマンドレットの詳細については、以下を参照してください。

バイナリコマンドレットを作成するには、2つの特殊なコマンドレットの基底クラスから派生したコマンドレットクラスを実装する必要があります。 派生クラスには次のものが必要です。

  • 派生クラスをコマンドレットとして識別する属性を宣言します。
  • コマンドレットのパラメーターとしてパブリックプロパティを識別する属性で装飾されたパブリックプロパティを定義します。
  • 1つ以上の入力処理メソッドをオーバーライドしてレコードを処理します。

クラスを含むアセンブリは、Initialsessionstate コマンドレットを使用して直接読み込むことができます。また、アセンブリを読み込むホストアプリケーションを作成するには、 API を使用します。 どちらの方法でも、プログラムおよびコマンドラインからコマンドレットの機能にアクセスできます。

コマンドレットの使用条件

PowerShell コマンドレットのドキュメントでは、次の用語が頻繁に使用されます。

コマンドレット属性

コマンドレットクラスをコマンドレットとして宣言するために使用される .NET 属性。 PowerShell では、省略可能な他のいくつかの属性が使用されますが、コマンドレットの属性は必須です。 この属性の詳細については、「 コマンドレット属性の宣言」を参照してください。

コマンドレット パラメーター

ユーザーが使用できるパラメーター、またはコマンドレットを実行しているアプリケーションに対して使用可能なパラメーターを定義するパブリックプロパティ。 コマンドレットには、必須の、名前付き、位置指定、および スイッチ のパラメーターを指定できます。 スイッチパラメーターを使用すると、呼び出しでパラメーターが指定されている場合にのみ評価されるパラメーターを定義できます。 さまざまな種類のパラメーターの詳細については、「 コマンドレットパラメーター」を参照してください。

パラメーター セット

特定のアクションを実行するために同じコマンドで使用できるパラメーターのグループ。 コマンドレットには複数のパラメーターセットを含めることができますが、各パラメーターセットには一意のパラメーターが少なくとも1つ必要です。 適切なコマンドレットの設計では、unique パラメーターも必須パラメーターであることを強く示唆しています。 パラメーターセットの詳細については、「 コマンドレットパラメーターセット」を参照してください。

[動的パラメーター]

実行時にコマンドレットに追加されるパラメーター。 通常、動的パラメーターは、別のパラメーターが特定の値に設定されている場合に、コマンドレットに追加されます。 動的パラメーターの詳細については、「 コマンドレット動的パラメーター」を参照してください。

入力処理メソッド

System.string クラスは 、レコードを処理するために使用される次の仮想メソッドを提供します。 派生したすべてのコマンドレットクラスは、最初の3つのメソッドをオーバーライドする必要があります。

  • System.servicemodel []: コマンドレットに対して、オプションの1回限りの前処理機能を提供するために使用されます。
  • System.string: コマンドレットのレコードごとの処理機能を提供するために使用されます。 コマンドレットの入力によっては、すべての回数 (またはまったくではない) の呼び出しが必要になる場合があります。
  • System.servicemodel: コマンドレットに対して、省略可能な1回限りの後処理機能を提供するために使用されます。
  • [システムの管理]-[ StopProcessing]: ユーザーがコマンドレットを非同期に停止したときに処理を停止するために使用されます (たとえば、 CTRLC キーを押すなど + )。

これらのメソッドの詳細については、「 コマンドレットの入力処理方法」を参照してください。

コマンドレットを実装する場合は、これらの入力処理メソッドの少なくとも1つをオーバーライドする必要があります。 通常、 Processrecord () は、コマンドレットが処理するすべてのレコードに対して呼び出されるため、オーバーライドするメソッドです。 これに対して、 beginprocessing () メソッドと EndProcessing () メソッドは、レコードの前処理または後処理を実行するために1回呼び出されます。 これらのメソッドの詳細については、「 入力処理方法」を参照してください。

機能を処理する

PowerShell では、コマンドレットがシステムに変更を加える前に、ユーザーにフィードバックを求めるコマンドレットを作成できます。 この機能を使用するには、コマンドレットの属性を宣言するときに、この機能がサポートされていることをコマンドレットが宣言する必要があります。また、コマンドレットは、 ShouldProcess 入力処理メソッド内からメソッド呼び出す必要があります。 機能をサポートする方法の詳細については ShouldProcess 、「 確認の要求」を参照してください。

トランザクション

1つのタスクとして扱われるコマンドの論理グループ。 グループ内のいずれかのコマンドが失敗し、ユーザーがトランザクション内で実行されたアクションを受け入れるか拒否するかを選択できる場合、タスクは自動的に失敗します。 コマンドレットは、トランザクションに参加するには、コマンドレットの属性が宣言されているときにトランザクションをサポートするように宣言する必要があります。 トランザクションのサポートは Windows PowerShell 2.0 で導入されました。 トランザクションの詳細については、「 トランザクションをサポートする方法」を参照してください。

コマンドレットの違い

コマンドレットは、次の方法で他のコマンドシェル環境のコマンドとは異なります。

  • コマンドレットは .NET クラスのインスタンスです。これらはスタンドアロンの実行可能ファイルではありません。
  • コマンドレットは、数十のコード行から作成できます。
  • コマンドレットは、通常、独自の解析、エラー表示、または出力書式設定を行いません。 解析、エラー表示、および出力の書式設定は、PowerShell ランタイムによって処理されます。
  • コマンドレットは、テキストのストリームからではなく、パイプラインからの入力オブジェクトを処理します。また、コマンドレットは通常、オブジェクトをパイプラインに出力として配信します。
  • コマンドレットは、一度に1つのオブジェクトを処理するため、レコード指向です。

コマンドレットの基本クラス

Windows PowerShell は、次の2つの基本クラスから派生したコマンドレットをサポートしています。

  • ほとんどのコマンドレットは、 system.servicemodel 基底クラス から派生した .net クラスに基づいています。 このクラスから派生させることで、コマンドレットは Windows PowerShell ランタイムの最小限の依存関係を使用できるようになります。 これには 2 つ利点があります。 最初の利点は、コマンドレットオブジェクトが小さく、PowerShell ランタイムの変更によって影響を受ける可能性が低いことです。 2つ目の利点は、必要に応じて、コマンドレットオブジェクトのインスタンスを直接作成し、PowerShell ランタイムを使用して呼び出すのではなく、直接呼び出すことができることです。

  • より複雑なコマンドレットは、 PSCmdlet 基底クラスから派生した .net クラスに基づいています。 このクラスから派生させることにより、PowerShell ランタイムにはるかに多くのアクセス権を与えることができます。 このアクセスにより、コマンドレットは、スクリプトを呼び出したり、プロバイダーにアクセスしたり、現在のセッション状態にアクセスしたりすることができます。 (現在のセッション状態にアクセスするには、セッション変数とユーザー設定を取得して設定します)。ただし、このクラスから派生すると、コマンドレットオブジェクトのサイズが大きくなり、コマンドレットが現在のバージョンの PowerShell ランタイムに密に結合されることになります。

一般に、PowerShell ランタイムへの拡張アクセスが必要な場合を除き、 このクラスから 派生させる必要があります。 ただし、PowerShell ランタイムには、コマンドレットを実行するための広範なログ記録機能があります。 監査モデルがこのログに依存している場合は、 PSCmdlet クラスから派生することによって、別のコマンドレット内からコマンドレットを実行できないようにすることができます。

コマンドレットの属性

PowerShell では、コマンドレットの管理に使用されるいくつかの .NET 属性と、PowerShell によって提供され、コマンドレットで必要となる可能性がある共通の機能を指定します。 たとえば、属性を使用して、クラスをコマンドレットとして指定したり、コマンドレットのパラメーターを指定したり、コマンドレットの開発者がコマンドレットコードにその機能を実装する必要がないように入力の検証を要求したりします。 属性の詳細については、「 PowerShell attributes」を参照してください。

コマンドレット名

PowerShell では、動詞と名詞の名前の組み合わせを使用して、コマンドレットに名前を指定します。 たとえば、PowerShell に含まれている Get-Command コマンドレットは、コマンド シェルに登録されているすべてのコマンドレットを取得するために使用されます。 動詞は、コマンドレットによって実行されるアクションを示し、名詞は、コマンドレットによるアクションの実行対象であるリソースを示します。

これらの名前は、.NET クラスがコマンドレットとして宣言されている場合に指定します。 コマンドレットとして .NET クラスを宣言する方法の詳細については、「 コマンドレット属性の宣言」を参照してください。

コマンドレットコードの記述

このドキュメントでは、コマンドレットコードの記述方法を確認する2つの方法について説明します。 コードをよく説明する必要がない場合は、 コマンドレットコードの例を参照してください。 コードの詳細については、「 Getproc チュートリアル」、「 stopproc チュートリアル」、または「 selectstr チュートリアル 」のトピックを参照してください。

コマンドレットの記述に関するガイドラインの詳細については、「 コマンドレットの開発ガイドライン」を参照してください。

参照

PowerShell コマンドレットの概念

PowerShell コマンドレットの記述

PowerShell SDK