コマンドレットは、PowerShell 環境で使用される軽量のコマンドです。 PowerShell ランタイムは、コマンド ラインで提供されるオートメーション スクリプトのコンテキスト内でこれらのコマンドレットを呼び出します。 PowerShell ランタイムは、PowerShell API を使用してプログラムで呼び出します。
コマンドレット
コマンドレットはアクションを実行し、通常はパイプラインの次のコマンドに Microsoft .NET オブジェクトを返します。 コマンドレットは、PowerShell のパイプライン セマンティクスに参加する 1 つのコマンドです。 これには、バイナリ (C#) コマンドレット、高度なスクリプト関数、CDXML、ワークフローが含まれます。
この SDK ドキュメントでは、C# で記述されたバイナリ コマンドレットを作成する方法について説明します。 スクリプト ベースのコマンドレットの詳細については、次を参照してください。
バイナリ コマンドレットを作成するには、2 つの特殊なコマンドレット基底クラスのいずれかから派生するコマンドレット クラスを実装する必要があります。 派生クラスは次の必要があります。
- 派生クラスをコマンドレットとして識別する属性を宣言します。
- パブリック プロパティをコマンドレット パラメーターとして識別する属性で修飾されるパブリック プロパティを定義します。
- レコードを処理するために、1 つ以上の入力処理メソッドをオーバーライドします。
Import-Module コマンドレットを使用してクラスを含むアセンブリを直接読み込んだり、System.Management.Automation.Runspaces.InitialSessionState API を使用してアセンブリを読み込むホスト アプリケーションを作成したりできます。 どちらの方法でも、コマンドレットの機能にプログラムとコマンド ラインでアクセスできます。
コマンドレットの用語
PowerShell コマンドレットのドキュメントでは、次の用語が頻繁に使用されます。
コマンドレット属性
コマンドレット クラスをコマンドレットとして宣言するために使用される .NET 属性。 PowerShell では、省略可能な他のいくつかの属性が使用されますが、コマンドレット属性が必要です。 この属性の詳細については、「コマンドレット属性宣言 を参照してください。
コマンドレット パラメーター
ユーザーまたはコマンドレットを実行しているアプリケーションで使用できるパラメーターを定義するパブリック プロパティ。 コマンドレットには、必須、名前付き、位置指定、および スイッチ パラメーターを指定できます。 スイッチ パラメーターを使用すると、パラメーターが呼び出しで指定されている場合にのみ評価されるパラメーターを定義できます。 さまざまな種類のパラメーターの詳細については、「コマンドレット パラメーターの を参照してください。
パラメーター セット
特定のアクションを実行するために同じコマンドで使用できるパラメーターのグループ。 コマンドレットは複数のパラメーター セットを持つことができますが、各パラメーター セットには、一意のパラメーターが少なくとも 1 つ必要です。 適切なコマンドレット設計では、一意のパラメーターも必須パラメーターであることを強くお勧めします。 パラメーター セットの詳細については、「コマンドレット パラメーター セットの」を参照してください。
動的パラメーター
実行時にコマンドレットに追加されるパラメーター。 通常、別のパラメーターが特定の値に設定されると、動的パラメーターがコマンドレットに追加されます。 動的パラメーターの詳細については、「コマンドレットの動的パラメーターの」を参照してください。
入力処理メソッド
System.Management.Automation.Cmdlet クラスは、レコードの処理に使用される次の仮想メソッドを提供します。 すべての派生コマンドレット クラスは、最初の 3 つのメソッドのうち 1 つ以上をオーバーライドする必要があります。
- System.Management.Automation.Cmdlet.BeginProcessing: コマンドレットにオプションの 1 回限りの前処理機能を提供するために使用します。
- System.Management.Automation.Cmdlet.ProcessRecord: コマンドレットのレコードごとの処理機能を提供するために使用されます。 System.Management.Automation.Cmdlet.ProcessRecord メソッドは、コマンドレットの入力に応じて、何度でも呼び出されるか、まったく呼び出されない場合があります。
- System.Management.Automation.Cmdlet.EndProcessing: コマンドレットにオプションの 1 回限りの後処理機能を提供するために使用します。
- System.Management.Automation.Cmdlet.StopProcessing: ユーザーがコマンドレットを非同期的に停止したときに処理を停止するために使用されます (たとえば、ctrl キー +Cキー押します)。
これらのメソッドの詳細については、「コマンドレット入力処理メソッド 」を参照してください。
コマンドレットを実装する場合は、これらの入力処理メソッドの少なくとも 1 つをオーバーライドする必要があります。 通常、ProcessRecord() は、コマンドレットが処理するすべてのレコードに対して呼び出されるため、オーバーライドするメソッドです。 これに対し、BeginProcessing() メソッドと EndProcessing() メソッドは、レコードの前処理または後処理を実行するために 1 回呼び出されます。 これらのメソッドの詳細については、「入力処理メソッドの」を参照してください。
ShouldProcess 機能
PowerShell を使用すると、コマンドレットがシステムに変更を行う前に、ユーザーにフィードバックを求めるコマンドレットを作成できます。 この機能を使用するには、コマンドレット属性を宣言するときに、コマンドレットが ShouldProcess
機能をサポートしていることを宣言する必要があります。コマンドレットは、System.Management.Automation.Cmdlet.ShouldProcess を呼び出し、入力処理メソッド内から System.Management.Automation.Cmdlet.ShouldContinue メソッドを する必要があります。
ShouldProcess
機能をサポートする方法の詳細については、「確認の要求」を参照してください。
トランザクション
1 つのタスクとして扱われるコマンドの論理グループ。 グループ内のコマンドが失敗し、ユーザーがトランザクション内で実行されたアクションを受け入れるか拒否するかの選択がある場合、タスクは自動的に失敗します。 トランザクションに参加するには、コマンドレット属性が宣言されたときにトランザクションをサポートすることを宣言する必要があります。 トランザクションのサポートは、Windows PowerShell 2.0 で導入されました。 トランザクションの詳細については、「トランザクションをサポートする方法」を参照してください。
コマンドレットとコマンドの違い
コマンドレットは、次の点で他のコマンド シェル環境のコマンドとは異なります。
- コマンドレットは .NET クラスのインスタンスです。これらはスタンドアロンの実行可能ファイルではありません。
- コマンドレットは、数十行のコードから作成できます。
- コマンドレットは、通常、独自の解析、エラー表示、または出力の書式設定を行いません。 解析、エラー表示、出力の書式設定は、PowerShell ランタイムによって処理されます。
- コマンドレットはテキストストリームではなくパイプラインからの入力オブジェクトを処理し、コマンドレットは通常、パイプラインに出力としてオブジェクトを配信します。
- コマンドレットは、一度に 1 つのオブジェクトを処理するため、レコード指向です。
コマンドレットの基本クラス
Windows PowerShell では、次の 2 つの基本クラスから派生したコマンドレットがサポートされています。
ほとんどのコマンドレットは、System.Management.Automation.Cmdlet 基本クラスから派生する .NET クラスに基づいています。 このクラスから派生すると、コマンドレットは Windows PowerShell ランタイムに対する依存関係の最小セットを使用できます。 これには 2 つ利点があります。 1 つ目の利点は、コマンドレット オブジェクトが小さく、PowerShell ランタイムの変更の影響を受ける可能性が低い点です。 2 つ目の利点は、必要に応じて、コマンドレット オブジェクトのインスタンスを直接作成し、PowerShell ランタイムを介して呼び出す代わりに直接呼び出すことができるということです。
より複雑なコマンドレットは、System.Management.Automation.PSCmdlet 基本クラスから派生する .NET クラスに基づいています。 このクラスから派生すると、PowerShell ランタイムへのアクセスが大幅に増えます。 このアクセスにより、コマンドレットはスクリプトを呼び出し、プロバイダーにアクセスし、現在のセッション状態にアクセスできます。 (現在のセッション状態にアクセスするには、セッション変数と基本設定を取得して設定します)。ただし、このクラスから派生すると、コマンドレット オブジェクトのサイズが増え、コマンドレットが PowerShell ランタイムの現在のバージョンとより緊密に結合されることを意味します。
一般に、PowerShell ランタイムへの拡張アクセスが必要な場合を除き、System.Management.Automation.Cmdlet クラスから派生する必要があります。 ただし、PowerShell ランタイムには、コマンドレットを実行するための広範なログ機能があります。 監査モデルがこのログ記録に依存している場合は、System.Management.Automation.PSCmdlet クラスから派生することで、コマンドレットが別のコマンドレット内から実行されないようにすることができます。
コマンドレットの属性
PowerShell では、コマンドレットを管理したり、PowerShell によって提供される一般的な機能を指定したりするために使用されるいくつかの .NET 属性を定義します。この属性は、コマンドレットで必要になる可能性があります。 たとえば、属性は、コマンドレットとしてクラスを指定したり、コマンドレットのパラメーターを指定したり、コマンドレット開発者がその機能をコマンドレット コードに実装する必要がないように入力の検証を要求したりするために使用されます。 属性の詳細については、「PowerShell 属性の」を参照してください。
コマンドレット名
PowerShell では、動詞と名詞の名前のペアを使用してコマンドレットに名前を付けます。 たとえば、PowerShell に含まれる Get-Command
コマンドレットは、コマンド シェルに登録されているすべてのコマンドレットを取得するために使用されます。 動詞はコマンドレットが実行するアクションを識別し、名詞はコマンドレットがそのアクションを実行するリソースを識別します。
これらの名前は、.NET クラスがコマンドレットとして宣言されるときに指定されます。 .NET クラスをコマンドレットとして宣言する方法の詳細については、「コマンドレット属性宣言 を参照してください。
コマンドレット コードの記述
このドキュメントでは、コマンドレット コードの記述方法を検出する 2 つの方法を示します。 多くの説明なしでコードを表示する場合は、「コマンドレット コード の例参照してください。 コードの詳細については、「getProc Tutorial 」、StopProc Tutorial、または SelectStr Tutorial トピック 参照してください。
コマンドレットを記述するためのガイドラインの詳細については、「コマンドレット開発ガイドライン を参照してください。
こちらもご覧ください
PowerShell コマンドレット の作成の
PowerShell SDK を する
PowerShell