次の方法で共有


Windows PowerShellプロバイダーの設計

もし製品や設定がユーザーがナビゲーションや閲覧したいデータベースなどの保存データのセットを公開している場合は、Windows PowerShellプロバイダーを実装すべきです。 さらに、製品がコンテナを提供している場合、たとえマルチレベルコンテナでなくても、WindowsのPowerShellプロバイダーを実装するのが理にかなっています。 例えば、コマンドレットの動詞「Copy, Move, Rename, New, Remove 」が製品や設定データに対して意味を持てる場合、Windows PowerShellコンテナプロバイダーを実装したいかもしれません。

Windows PowerShell パスはプロバイダーを識別します

Windows PowerShellランタイムは、適切なWindowsのPowerShellプロバイダーにアクセスするためにWindows PowerShellパスを使用します。 コマンドレットがこれらのパスのいずれかを指定すると、ランタイムは関連するデータストアにアクセスするためにどのプロバイダーを使うかを認識します。 これらの経路には、ドライブ認定経路、提供者適格経路、提供者直接経路、提供者内部経路が含まれます。 各Windows PowerShellプロバイダーは、これらのパスのいずれかを1つ以上サポートしなければなりません。

Windows PowerShell パスの詳細については、「Windows PowerShell Works」をご覧ください。

Drive-Qualified パスの定義

ユーザーが物理ドライブにあるデータにアクセスできるようにするには、Windows PowerShellプロバイダーがドライブ限定パスをサポートしなければなりません。 このパスはドライブ名の後にコロン(:)、例えばmydrive:\abc\bar)をつけて始まります。

Provider-Qualified パスの定義

Windows PowerShellランタイムがプロバイダの初期化および初期化解除を行うためには、Windows PowerShellプロバイダがプロバイダー限定パスをサポートしている必要があります。 例えば、FileSystem:\\uncshare\abc\barはWindows PowerShellが提供するFileSystemプロバイダーのプロバイダー限定パスです。

Provider-Direct パスの定義

Windows PowerShellプロバイダーへのリモートアクセスを可能にするには、現在の場所のWindows PowerShellプロバイダーに直接パスするプロバイダーダイレクトパスをサポートする必要があります。 例えば、レジストリのWindowsPowerShellプロバイダーは、\\server\regkeypathをプロバイダー直接パスとして使用できます。

Provider-Internal パスの定義

非WindowsのPowerShellアプリケーションプログラミングインターフェース(API)を使ってデータにアクセスするために、Windows PowerShellプロバイダーはプロバイダー内部パスをサポートしなければなりません。 この経路は、提供者適格パスの「::」の後に示されています。 例えば、FileSystem Windows PowerShellプロバイダーのプロバイダー-内部パスは \\uncshare\abc\bar です。

保存データの変更

基盤となるデータストアを変更するメソッドを上書きする際は、必ず System.Management.Automation.Provider.CmdletProvider.WriteItemObject* メソッドを呼び出し、そのメソッドによって変更されたアイテムの最も日付 up-toバージョンを含みます。 プロバイダーのインフラストラクチャは、ユーザーが -PassThru パラメータを指定する場合など、アイテムオブジェクトをパイプラインに渡す必要があるかどうかを判断します。 最も -date(up-to)項目を取得するのがパフォーマンス面でコストがかかる操作であれば、Context.PassThru プロパティをテストして、実際に結果のアイテムを書く必要があるかどうか判断できます。

プロバイダーのベースクラスを選びましょう

Windows PowerShellは、自分でWindowsのPowerShellプロバイダーを実装するための複数のベースクラスを提供しています。 プロバイダーを設計する際は、このセクションで説明する基本的なクラスを、あなたの要件に最も適したものを選択してください。

各Windows PowerShellプロバイダーのベースクラスは、一連のコマンドレットを提供します。 このセクションではコマンドレットについて説明しますが、そのパラメータについては説明していません。

セッション状態を用いることで、Windows PowerShellランタイムは Get-LocationSet-LocationPop-LocationPush-Location cmdletなど、特定のWindows PowerShellプロバイダーに対して複数のロケーションコマンドレットを利用可能にします。 Get-Helpコマンドレットを使って、これらの場所コマンドレットに関する情報を得ることができます。

CmdletProviderベースクラス

System.Management.Automation.Provider.CmdletProviderクラスは、基本的なWindowsのPowerShellプロバイダーを定義しています。 このクラスはプロバイダー宣言をサポートし、すべてのWindows PowerShellプロバイダーで利用可能な多くのプロパティやメソッドを提供します。 このクラスは、 Get-PSProvider コマンドレットによって呼び出しられ、セッションで利用可能なすべてのプロバイダーを一覧にします。 このコマンドレットの実装はセッション状態によって提供されます。

Windows PowerShellプロバイダーはすべてのWindows PowerShell言語スコープで利用可能です。

DriveCmdletProviderベースクラス

System.Management.Automation.Provider.DriveCmdletProviderクラスは、新しいドライブの追加、既存ドライブの削除、デフォルトドライブの初期化などの操作をサポートするWindowsのPowerShellドライブプロバイダーを定義しています。 例えば、Windows PowerShellが提供するFileSystemプロバイダーは、ハードドライブやCD/DVDデバイスドライブなど、マウントされたすべてのボリュームのドライブを初期化します。

このクラスは System.Management.Automation.Provider.CmdletProvider のベースクラスから派生しています。 以下の表は、このクラスによって公開されているコマンドレットを一覧に示しています。 上記のコマンドレットに加え、 Get-PSDrive コマンドレット(セッション状態で公開)は利用可能なドライブを取得するために使われる関連コマンドレットです。

コマンドレット Definition
New-PSDrive セッション用の新しいドライブを作成し、ドライブ情報をストリーミングします。
Remove-PSDrive セッションからドライブを削除します。

ItemCmdletProvider ベースクラス

System.Management.Automation.Provider.ItemCmdletProviderクラスは、データストア内の個々のアイテムに対して操作を行うWindowsのPowerShellアイテムプロバイダーを定義しており、コンテナやナビゲーション機能を前提としていません。 このクラスは System.Management.Automation.Provider.DriveCmdletProvider のベースクラスから派生しています。 以下の表は、このクラスによって公開されているコマンドレットを一覧に示しています。

コマンドレット Definition
Clear-Item 指定された場所の現在のアイテムの内容をクリアし、プロバイダーが指定した「クリア」値に置き換えます。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Get-Item 指定された場所からアイテムを取得し、その結果生まれたオブジェクトをストリーミングします。
Invoke-Item 指定されたパスでアイテムのデフォルトアクションを呼び出します。
Set-Item 指定された位置に指定された値でアイテムを設定します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Resolve-Path Windows PowerShellパスのワイルドカードを解決し、パス情報をストリーミングします。
Test-Path 指定された経路をテストし、存在する場合は true 返し、そうでなければ返 false 。 このコマンドレットは、System.Management.Automation.Provider.CmdletProvider.WriteItemObject*メソッドのIsContainerパラメータをサポートするために実装されています。

ContainerCmdletProvider ベースクラス

System.Management.Automation.Provider.ContainerCmdletProviderクラスは、データストアアイテムのコンテナをユーザーに公開するWindowsのPowerShellコンテナプロバイダーを定義しています。 ただし、Windows PowerShellコンテナプロバイダーは、1つのコンテナ(入れ子なし)にアイテムが入っている場合にのみ使用可能です。 もしネストされたコンテナがある場合は、Windows PowerShellナビゲーションプロバイダーを実装する必要があります。

このクラスは System.Management.Automation.Provider.ItemCmdletProvider のベースクラスから派生しています。 以下の表は、このクラスで実装されるコマンドレットを定義しています。

コマンドレット Definition
Copy-Item アイテムをある場所から別の場所へコピーします。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Get-ChildItem 指定された場所で子アイテムを取得し、それらをオブジェクトとしてストリーミングします。
New-Item 指定された場所に新しいアイテムを作成し、その結果生まれたオブジェクトをストリーミングします。
Remove-Item 指定された場所からアイテムを除去します。
Rename-Item 指定された場所でアイテムの名前を変更することができます。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。

System.Management.Automation.Provider.NavigationCmdletProviderクラスは、複数のコンテナを使用するアイテムに対して操作を行うWindows PowerShellナビゲーションプロバイダーを定義しています。 このクラスは System.Management.Automation.Provider.ContainerCmdletProvider のベースクラスから派生しています。 以下の表は、このクラスによって公開されたコマンドレットを一覧に示します。

コマンドレット Definition
Combine-Path 2つのパスを1つのパスに結合し、パス間でプロバイダー固有の区切り符を使用します。 このコマンドレットは文字列をストリーミングします。
Move-Item 指定された場所にアイテムを移動させます。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。

関連するコマンドレットは、Windows PowerShellが提供する基本的な Parse-Path コマンドレットです。 このコマンドレットは、 Parent パラメータをサポートするWindowsのPowerShellパスを解析するために使用できます。 親パス文字列をストリーミングします。

サポートするプロバイダーインターフェースを選択してください

Windows PowerShellのベースクラスのいずれかから派生するだけでなく、WindowsのPowerShellプロバイダーは以下の1つ以上のプロバイダーインターフェースから派生することで他の機能もサポートできます。 この節では、それぞれのインターフェースとサポートするコマンドレットを定義します。 インターフェース対応のコマンドレットのパラメータは記述されていません。 コマンドレットパラメータ情報は、 Get-Command および Get-Help コマンドレットを使ってオンラインで入手可能です。

IContentCmdletProvider

System.Management.Automation.Provider.IContentCmdletProviderインターフェースは、データ項目の内容に対して操作を行うコンテンツプロバイダーを定義します。 以下の表は、このインターフェースによって公開されるコマンドレットを一覧にしています。

コマンドレット Definition
Add-Content 指定されたアイテムの内容に示された値の長さを付加します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Clear-Content 指定されたアイテムの内容を「クリア」値に設定します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Get-Content 指定されたアイテムの内容を取得し、その結果生まれたオブジェクトをストリーミングします。
Set-Content 指定されたアイテムの既存コンテンツを置き換えます。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。

IPropertyCmdletProvider

System.Management.Automation.Provider.IPropertyCmdletProviderインターフェースは、データストア内のアイテムのプロパティに対して操作を行うWindows PowerShellプロバイダのプロパティを定義しています。 以下の表は、このインターフェースによって公開されるコマンドレットを一覧にしています。

これらのコマンドレットの Path パラメータは、プロパティを特定するのではなく、アイテムへのパスを示します。

コマンドレット Definition
Clear-ItemProperty 指定されたアイテムのプロパティを「クリア」値に設定します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Get-ItemProperty 指定されたアイテムからプロパティを取得し、その結果生まれたオブジェクトをストリーミングします。
Set-ItemProperty 指定されたアイテムのプロパティを指定された値で設定します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。

IDynamicPropertyCmdletProvider

System.Management.Automation.Provider.IDynamicPropertyCmdletProviderインターフェースは、System.Management.Automation.Provider.IPropertyCmdletProviderから派生し、サポートされるコマンドレットに対して動的パラメータを指定するプロバイダーを定義します。 このタイプのプロバイダーは、実行時にプロパティを定義できる操作、例えば新しいプロパティ操作を扱います。 このような操作は、静的に定義された性質を持つアイテムでは不可能です。 以下の表は、このインターフェースによって公開されるコマンドレットを一覧にしています。

コマンドレット Definition
Copy-ItemProperty 指定されたアイテムから別のアイテムへプロパティをコピーします。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
Move-ItemProperty 指定されたアイテムから別のアイテムへプロパティを移動します。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。
New-ItemProperty 指定されたアイテムにプロパティを作成し、その結果生まれたオブジェクトをストリーミングします。
Remove-ItemProperty 指定されたアイテムのプロパティを取り除くこと。
Rename-ItemProperty 指定されたアイテムのプロパティ名を変更すること。 このコマンドレットは、 PassThru パラメータが指定されていない限り、出力オブジェクトをパイプラインに通すことはありません。

ISecurityDescriptorCmdletProvider

System.Management.Automation.Provider.ISecurityDescriptorCmdletProviderインターフェースは、プロバイダーにセキュリティディスクリプタ機能を追加します。 このインターフェースにより、ユーザーはデータストア内のアイテムのセキュリティディスクリプタ情報を取得・設定できます。 以下の表は、このインターフェースによって公開されるコマンドレットを一覧にしています。

コマンドレット Definition
Get-Acl アクセス制御リスト(ACL)に含まれる情報を取得します。ACLは、例えばファイルやオブジェクトなどのオペレーティングシステムのリソースを保護するセキュリティ記述子の一部です。
Set-Acl ACLの情報を設定します。 これは、指定されたパスに指定されたアイテムに対して System.Security.AccessControl.ObjectSecurity のインスタンスとして存在します。 このコマンドレットは、Windows PowerShellプロバイダーがセキュリティ情報の設定をサポートしている場合、レジストリ内のファイル、キー、サブキー、その他のプロバイダー項目の情報を設定できます。

こちらもご覧ください

Windows PowerShell プロバイダーの作成

Windows PowerShellの仕組み

Windows PowerShell SDK