基本的な Windows PowerShell プロバイダーの作成
このトピックは、Windows PowerShell プロバイダーを作成する方法を学習するための開始点です。 ここで説明する基本的なプロバイダーは、プロバイダーを開始および停止するためのメソッドを提供します。このプロバイダーは、データ ストアにアクセスしたり、データ ストア内のデータを取得または設定したりする手段を提供していませんが、すべてのプロバイダーに必要な基本的な機能を提供します。
前述のように、ここで説明する基本的なプロバイダーは、プロバイダーを開始および停止するためのメソッドを実装します。 Windows PowerShell ランタイムは、これらのメソッドを呼び出してプロバイダーを初期化および初期化解除します。
注意
このプロバイダーのサンプルは、Windows PowerShell によって提供される AccessDBSampleProvider01.cs ファイルにあります。
Windows PowerShell プロバイダーを作成する最初の手順は、.NET クラスを定義することです。 この基本プロバイダーは、System.Management.Automation.Provider.CmdletProvider 基底クラスから派生する AccessDBProvider
というクラスを定義します。
プロバイダー クラスは、api 名前空間の Providers
名前空間 (xxx.PowerShell.Providers など) に配置することをお勧めします。 このプロバイダーは、すべての Windows PowerShell プロバイダー サンプルが実行される Microsoft.Samples.PowerShell.Provider
名前空間を使用します。
注意
Windows PowerShell プロバイダーのクラスは、明示的にパブリックとしてマークする必要があります。 public としてマークされていないクラスは、既定では内部に設定され、Windows PowerShell ランタイムでは見つかりません。
この基本プロバイダーのクラス定義を次に示します。
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
クラス定義の直前に、構文 [CmdletProvider()]を使用して、System.Management.Automation.Provider.CmdletProviderAttribute 属性を宣言する必要があります。
属性キーワードを設定して、必要に応じてクラスをさらに宣言できます。 ここで宣言 System.Management.Automation.Provider.CmdletProviderAttribute 属性には、2 つのパラメーターが含まれていることに注意してください。 最初の属性パラメーターは、ユーザーが後で変更できるプロバイダーの既定のフレンドリ名を指定します。 2 番目のパラメーターは、コマンド処理中にプロバイダーが Windows PowerShell ランタイムに公開する Windows PowerShell で定義された機能を指定します。 プロバイダー機能に使用できる値は、System.Management.Automation.Provider.ProviderCapabilities 列挙型によって定義されます。 これは基本プロバイダーであるため、機能はサポートされません。
注意
Windows PowerShell プロバイダーの完全修飾名には、アセンブリ名と、プロバイダーの登録時に Windows PowerShell によって決定されるその他の属性が含まれます。
System.Management.Automation.Provider.CmdletProvider 基本クラスとすべての派生クラスはステートレスと見なされます。これは、Windows PowerShell ランタイムがプロバイダー インスタンスを必要な場合にのみ作成するためです。 そのため、プロバイダー固有のデータに対して完全な制御と状態のメンテナンスが必要な場合は、System.Management.Automation.ProviderInfo クラスからクラスを派生させる必要があります。 派生クラスでは、Windows PowerShell ランタイムが System.Management.Automation.Provider.CmdletProvider.Start* メソッドを呼び出してプロバイダーを初期化するときにプロバイダー固有のデータにアクセスできるように、状態を維持するために必要なメンバーを定義する必要があります。
Windows PowerShell プロバイダーは、接続ベースの状態を維持することもできます。 接続状態の維持の詳細については、「PowerShell ドライブ プロバイダーの作成」を参照してください。
プロバイダーを初期化するために、Windows PowerShell ランタイムは、Windows PowerShell の起動時に System.Management.Automation.Provider.CmdletProvider.Start* メソッドを呼び出します。 ほとんどの場合、プロバイダーは、このメソッドの既定の実装を使用できます。このメソッドは、単にプロバイダーを記述する System.Management.Automation.ProviderInfo オブジェクトを返します。 ただし、初期化情報を追加する場合は、独自の System.Management.Automation.Provider.CmdletProvider.Start* メソッドを実装する必要があります。このメソッドは、プロバイダーに渡される System.Management.Automation.ProviderInfo オブジェクトの変更されたバージョンを返します。 一般に、このメソッドは、渡された指定された System.Management.Automation.ProviderInfo オブジェクト、または他の初期化情報を含む変更された System.Management.Automation.ProviderInfo オブジェクトを返す必要があります。
この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。
プロバイダー固有のデータ状態 の定義に関する説明されているように、プロバイダー固有の情報の状態を維持できます。 この場合、派生クラスのインスタンスを返すには、System.Management.Automation.Provider.CmdletProvider.Start* メソッドをオーバーライドする必要があります。
System.Management.Automation.Provider.CmdletProvider.Start* メソッドのプロバイダー実装には、追加のパラメーターが必要な場合があります。 この場合、プロバイダーは、System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* メソッドをオーバーライドし、コマンドレット クラスまたは System.Management.Automation.RuntimeDefinedParameterDictionary オブジェクトのような解析属性を持つプロパティとフィールドを持つオブジェクトを返す必要があります。
この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。
Windows PowerShell プロバイダーが使用するリソースを解放するには、独自の System.Management.Automation.Provider.CmdletProvider.Stop* メソッドを実装する必要があります。 このメソッドは、セッションの終了時にプロバイダーを初期化解除するために、Windows PowerShell ランタイムによって呼び出されます。
この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。
完全なサンプル コードについては、AccessDbProviderSample01 コード サンプルを参照してください。
Windows PowerShell プロバイダーが Windows PowerShell に登録されたら、サポートされているコマンドレットをコマンド ラインで実行してテストできます。 この基本的なプロバイダーの場合は、新しいシェルを実行し、Get-PSProvider
コマンドレットを使用してプロバイダーの一覧を取得し、AccessDb プロバイダーが存在することを確認します。
Get-PSProvider
次の出力が表示されます。
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}
PowerShell に関するフィードバック
PowerShell はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。