基本的な Windows PowerShell プロバイダーを作成する

このトピックでは、Windows PowerShell プロバイダーを作成する方法について説明します。 ここで説明する基本的なプロバイダーは、プロバイダーを開始および停止するためのメソッドを提供します。このプロバイダーは、データストアにアクセスしたり、データストア内のデータを取得または設定したりする手段を提供するものではなく、すべてのプロバイダーで必要な基本的な機能を提供します。

前述のように、ここで説明する基本的なプロバイダーは、プロバイダーを起動および停止するためのメソッドを実装しています。 Windows PowerShell ランタイムはこれらのメソッドを呼び出して、プロバイダーの初期化と初期化解除を行います。

注意

このプロバイダーのサンプルは、Windows PowerShell によって提供される AccessDBSampleProvider01 ファイルにあります。

Windows PowerShell Provider クラスの定義

Windows PowerShell プロバイダーを作成する最初の手順として、.net クラスを定義します。 この基本プロバイダーでは、というクラスを定義しています。このクラスは、という AccessDBProvider プロバイダー の基底クラスから派生します。

プロバイダークラスは、 Providers API 名前空間の名前空間 (たとえば、xxx. PowerShell プロバイダー) に配置することをお勧めします。 このプロバイダーは、 Microsoft.Samples.PowerShell.Provider すべての Windows PowerShell プロバイダーのサンプルを実行する名前空間を使用します。

注意

Windows PowerShell プロバイダーのクラスは、明示的にパブリックとしてマークされている必要があります。 パブリックとしてマークされていないクラスは、既定で内部に設定され、Windows PowerShell ランタイムによって検出されません。

この基本プロバイダーのクラス定義を次に示します。

[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider

クラス定義の直前に、構文 [[の表示プロバイダー ()] を使用して、"system.servicemodel" 属性を宣言する必要があります。

必要に応じて、クラスをさらに宣言する属性キーワードを設定できます。 ここで宣言されている system.string 属性に は、2つのパラメーター が含まれていることに注意してください。 最初の属性パラメーターは、プロバイダーの既定のわかりやすい名前を指定します。ユーザーは後で変更できます。 2番目のパラメーターは、コマンドの処理中にプロバイダーが Windows PowerShell ランタイムに公開する Windows PowerShell 定義の機能を指定します。 プロバイダー機能に使用できる値は、system.servicemodel 機能 の列挙型によって定義されます。 これは基本プロバイダーであるため、機能をサポートしていません。

注意

Windows PowerShell プロバイダーの完全修飾名には、プロバイダーの登録時に Windows PowerShell によって決定されるアセンブリ名とその他の属性が含まれます。

Provider-Specific 状態情報の定義

Windows PowerShell ランタイムは必要なときにのみプロバイダーインスタンスを作成するため、この基本クラスとすべての派生クラスはステートレスと見なされます。 したがって、プロバイダー固有のデータに対して完全な制御と状態の保守が必要な場合は、クラスを system.servicemodel クラスから派生させる必要があります。 派生クラスでは、状態を維持するために必要なメンバーを定義する必要があります。これにより、Windows PowerShell ランタイムが、プロバイダーを初期化するために、このメソッドを呼び出すときに、プロバイダー固有のデータにアクセスできるようになります。

Windows PowerShell プロバイダーは、接続ベースの状態を維持することもできます。 接続状態の維持の詳細については、「 PowerShell ドライブプロバイダーの作成」を参照してください。

プロバイダーを初期化しています

プロバイダーを初期化するために、Windows PowerShell ランタイムは、Windows PowerShell が開始されたときに、 System ............................ ほとんどの場合、プロバイダーはこのメソッドの既定の実装を使用できます。これにより、プロバイダーを記述する system.servicemodel オブジェクトが返されます 。 ただし、追加の初期化情報を追加する場合は、独自の システム を実装する必要があります。このメソッドは、プロバイダーに渡される変更されたバージョンの system.string オブジェクトを 返す、変更されたバージョンのを返します。 一般に、このメソッドは渡された 指定さ れた system.servicemodel オブジェクト、または他の初期化情報を含む変更された system.servicemodel オブジェクトを 返します。

この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。

プロバイダーは、「 プロバイダー固有のデータの状態の定義」で説明されているように、プロバイダー固有の情報の状態を維持できます。 この場合、の実装では、派生クラスのインスタンスを返すように、 このメソッドを オーバーライドする必要があります。

動的パラメーターの開始

プロバイダーによる システム の実装では、追加のパラメーターが必要になる場合があります。 この場合、プロバイダー は、このメソッドを オーバーライドして、コマンドレットクラスや system.string オブジェクトと 同様に解析属性を持つプロパティとフィールドを持つオブジェクトを返します。この場合、プロバイダーはこのメソッドをオーバーライドして、プロパティとフィールドを持つオブジェクトを返します。

この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。

プロバイダーの初期化解除

Windows PowerShell プロバイダーが使用するリソースを解放するには、プロバイダーが独自のsystem.string を実装する必要があります。 このメソッドは、セッションの終了時にプロバイダーを初期化解除するために Windows PowerShell ランタイムによって呼び出されます。

この基本プロバイダーは、このメソッドをオーバーライドしません。 ただし、次のコードは、このメソッドの既定の実装を示しています。

コード サンプル

完全なサンプルコードについては、「 AccessDbProviderSample01 のコードサンプル」を参照してください。

Windows PowerShell プロバイダーのテスト

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}

参照

Windows PowerShell プロバイダーの作成

Windows PowerShell プロバイダーを設計する