Windows PowerShell プロバイダーを使用すると、マウントされたドライブであるかのように、すべてのデータ ストアをファイル システムのように公開できます。 たとえば、組み込みのレジストリ プロバイダーを使用すると、コンピューターの c
ドライブ内を移動する場合と同様に、レジストリ内を移動できます。 プロバイダーは、Item
コマンドレット (たとえば、Get-Item
、Set-Item
など) をオーバーライドして、データ ストア内のデータをファイルとディレクトリがファイル システム内を移動するときに処理されるようにすることもできます。 プロバイダーとドライブ、および Windows PowerShell の組み込みプロバイダーの詳細については、「about_Providers」を参照してください。
プロバイダーとドライブ
プロバイダーは、データ ストアへのアクセス、移動、編集に使用されるロジックを定義しますが、ドライブは、プロバイダーによって定義された型のデータ ストア (またはデータ ストアの一部) への特定のエントリ ポイントを指定します。 たとえば、レジストリ プロバイダーを使用すると、レジストリ内のハイブとキーにアクセスできます。HKLM ドライブと HKCU ドライブは、レジストリ内の対応するハイブを指定します。 HKLM ドライブと HKCU ドライブはどちらもレジストリ プロバイダーを使用します。
プロバイダーを作成するときに、プロバイダーが使用可能になったときに自動的に作成される既定のドライブドライブを指定できます。 また、そのプロバイダーを使用する新しいドライブを作成するメソッドも定義します。
プロバイダーの種類
プロバイダーにはいくつかの種類があり、それぞれに異なるレベルの機能が用意されています。 プロバイダーは、System.Management.Automation.SessionStateCategoryCmdletProvider クラスのいずれかの子孫から派生するクラスとして実装されます。 さまざまな種類のプロバイダーの詳細については、「プロバイダーの種類を参照してください。
プロバイダー コマンドレット
プロバイダーは、コマンドレットに対応するメソッドを実装し、そのプロバイダーのドライブで使用する場合に、これらのコマンドレットのカスタム動作を作成できます。 プロバイダーの種類に応じて、使用できるコマンドレットのセットが異なります。 プロバイダーのカスタマイズに使用できるコマンドレットの完全な一覧については、「プロバイダーコマンドレットを参照してください。
プロバイダー パス
ユーザーは、ファイル システムなどのプロバイダー ドライブ間を移動します。 このため、パスの構文はファイル システム ナビゲーションで使用されるパスに対応することが想定されています。 ユーザーは、プロバイダー コマンドレットを実行するときに、アクセスする項目へのパスを指定します。 指定されたパスは、いくつかの方法で解釈できます。 プロバイダーは、次のパスの種類の 1 つ以上をサポートする必要があります。
ドライブ修飾パス
ドライブ修飾パスは、項目名、項目が配置されているコンテナーとサブコンテナー、および項目にアクセスする Windows PowerShell ドライブの組み合わせです。 (ドライブは、データ ストアへのアクセスに使用されるプロバイダーによって定義されます。 このパスは、ドライブ名の後にコロン (:)。 例: Get-ChildItem C:
プロバイダー修飾パス
Windows PowerShell エンジンがプロバイダーを初期化および初期化解除できるようにするには、プロバイダーがプロバイダー修飾パスをサポートしている必要があります。 たとえば、ユーザーは、次のプロバイダー修飾パスを定義するため、FileSystem プロバイダーを初期化および初期化解除できます: FileSystem::\\uncshare\abc\bar
します。
プロバイダーダイレクト パス
Windows PowerShell プロバイダーへのリモート アクセスを許可するには、現在の場所の Windows PowerShell プロバイダーに直接渡すプロバイダーダイレクト パスをサポートする必要があります。 たとえば、レジストリ Windows PowerShell プロバイダーは、プロバイダーダイレクト パスとして \\server\regkeypath
を使用できます。
プロバイダー内部パス
プロバイダー コマンドレットが Windows PowerShell 以外のアプリケーション プログラミング インターフェイス (API) を使用してデータにアクセスできるようにするには、Windows PowerShell プロバイダーでプロバイダー内部パスをサポートする必要があります。 このパスは、プロバイダー修飾パスの "::" の後に示されます。 たとえば、FileSystem Windows PowerShell プロバイダーのプロバイダー内部パスは \\uncshare\abc\bar
。
コマンドレット パラメーターのオーバーライド
プロバイダー固有のコマンドレットの動作は、プロバイダーによってオーバーライドできます。 オーバーライドできるパラメーターの一覧と、プロバイダー クラスでパラメーターをオーバーライドする方法については、「プロバイダー コマンドレット パラメーター
動的パラメーター
プロバイダーは、ユーザーがコマンドレットのいずれかの静的パラメーターに特定の値を指定したときに、プロバイダー コマンドレットに追加される動的パラメーターを定義できます。 プロバイダーは、1 つ以上の動的パラメーター メソッドを実装することによってこれを行います。 動的パラメーターの追加に使用できるコマンドレット パラメーターと、それらを実装するために使用されるメソッドの一覧については、「Provider コマンドレットの動的パラメーターを参照してください。
プロバイダーの機能
System.Management.Automation.Provider.ProviderCapabilities 列挙体は、プロバイダーがサポートできるさまざまな機能を定義します。 これには、ワイルドカードを使用する機能、アイテムをフィルター処理する機能、およびトランザクションをサポートする機能が含まれます。 プロバイダーの機能を指定するには、System.Management.Automation.Provider.ProviderCapabilities 列挙型の値の一覧を追加します。 System.Management.Automation.Provider.CmdletProviderAttribute.ProviderCapabilities* プロパティ (属性の 2 番目のパラメーター) として、System.Management.Automation.Provider.CmdletProviderAttribute プロバイダー クラスの属性として、論理 OR
操作と組み合わされます。 たとえば、次の属性は、System.Management.Automation.Provider.ProviderCapabilitiesShouldProcess と System.Management.Automation.Provider.ProviderCapabilitiesTransactions 機能をサポートすることを指定します。
[CmdletProvider(RegistryProvider.ProviderName, ProviderCapabilities.ShouldProcess | ProviderCapabilities.Transactions)]
プロバイダー コマンドレットのヘルプ
プロバイダーを作成するときは、サポートするプロバイダー コマンドレットに独自のヘルプを実装できます。 これには、各プロバイダー コマンドレットの 1 つのヘルプ トピック、または動的パラメーターの使用に基づいてプロバイダー コマンドレットの動作が異なる場合のヘルプ トピックの複数のバージョンが含まれます。 プロバイダーコマンドレット固有のヘルプをサポートするには、プロバイダーが system.Management.Automation.Provider.ICmdletProviderSupportsHelp インターフェイス 実装する必要があります。
Windows PowerShell エンジンは、System.Management.Automation.Provider.ICmdletProviderSupportsHelp.GetHelpMaml* メソッドを呼び出して、プロバイダー コマンドレットのヘルプ トピックを表示します。 エンジンは、Get-Help
コマンドレットの実行時にユーザーが指定したコマンドレットの名前と、ユーザーの現在のパスを提供します。
プロバイダーが異なるバージョンの同じプロバイダー コマンドレットを異なるドライブに実装する場合は、現在のパスが必要です。 このメソッドは、コマンドレット ヘルプの XML を含む文字列を返す必要があります。
ヘルプ ファイルの内容は、PSMAML XML を使用して書き込まれます。 これは、スタンドアロン コマンドレットのヘルプ コンテンツの記述に使用されるのと同じ XML スキーマです。 カスタム コマンドレット ヘルプのコンテンツを、プロバイダーのヘルプ ファイルの CmdletHelpPaths
要素の下に追加します。 次の例は、1 つのプロバイダー コマンドレットの command
要素を示し、プロバイダーのプロバイダー コマンドレットの名前を指定する方法を示しています。 楨
<CmdletHelpPaths>
<command:command>
<command:details>
<command:name>ProviderCmdletName</command:name>
<command:verb>Verb</command:verb>
<command:noun>Noun</command:noun>
<command:details>
</command:command>
<CmdletHelpPath>
こちらもご覧ください
Windows PowerShell プロバイダーの機能 の
Windows PowerShell プロバイダー の作成の
PowerShell