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 のしくみ」を参照してください。
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 プロバイダーに直接渡すプロバイダーダイレクト パスをサポートする必要があります。 たとえば、レジストリ Windows PowerShell プロバイダーは、プロバイダーダイレクト パスとして \\server\regkeypath を使用できます。
Provider-Internal パスの定義
プロバイダー コマンドレットが Windows PowerShell 以外のアプリケーション プログラミング インターフェイス (API) を使用してデータにアクセスできるようにするには、Windows PowerShell プロバイダーでプロバイダー内部パスをサポートする必要があります。 このパスは、プロバイダー修飾パスの "::" の後に示されます。 たとえば、FileSystem Windows PowerShell プロバイダーのプロバイダー内部パスは \\uncshare\abc\bar です。
保存されているデータの変更
基になるデータ ストアを変更するメソッドをオーバーライドする場合は、常に、System.Management.Automation.Provider.CmdletProvider.WriteItemObject* メソッドを呼び出し、そのメソッドによって変更されたアイテムの up-to-date バージョンが最も多くなります。 プロバイダー インフラストラクチャは、ユーザーが -PassThru パラメーターを指定するときなど、項目オブジェクトをパイプラインに渡す必要があるかどうかを判断します。 最も up-to-date 項目の取得がコストの高い操作 (パフォーマンス面) である場合は、Context.PassThru プロパティをテストして、結果のアイテムを実際に記述する必要があるかどうかを判断できます。
プロバイダーの基本クラスを選択する
Windows PowerShell には、独自の Windows PowerShell プロバイダーを実装するために使用できるさまざまな基本クラスが用意されています。 プロバイダーを設計する場合は、このセクションで説明する、要件に最も適した基本クラスを選択します。
各 Windows PowerShell プロバイダーの基本クラスは、一連のコマンドレットを使用できるようにします。 このセクションでは、コマンドレットについて説明しますが、パラメーターについては説明しません。
セッション状態を使用すると、Windows PowerShell ランタイムは、Get-Location
、Set-Location
、Pop-Location
、Push-Location
コマンドレットなど、特定の 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
コマンドレット (セッション状態によって公開) は、一覧に示されているコマンドレットに加えて、使用可能なドライブを取得するために使用される関連するコマンドレットです。
コマンドレット | 定義 |
---|---|
New-PSDrive |
セッションの新しいドライブを作成し、ドライブ情報をストリーム配信します。 |
Remove-PSDrive |
セッションからドライブを削除します。 |
ItemCmdletProvider 基本クラス
System.Management.Automation.Provider.ItemCmdletProvider クラスは、データ ストアの個々のアイテムに対して操作を実行する Windows PowerShell アイテム プロバイダーを定義します。コンテナーまたはナビゲーション機能は想定していません。 このクラスは、System.Management.Automation.Provider.DriveCmdletProvider 基本クラスから派生します。 次の表に、このクラスによって公開されるコマンドレットの一覧を示します。
コマンドレット | 定義 |
---|---|
Clear-Item |
指定した場所にあるアイテムの現在のコンテンツをクリアし、プロバイダーによって指定された "clear" 値に置き換えます。 このコマンドレットは、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 基底クラスから派生します。 次の表では、このクラスによって実装されるコマンドレットを定義します。
コマンドレット | 定義 |
---|---|
Copy-Item |
ある場所から別の場所にアイテムをコピーします。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
Get-ChildItem |
指定した場所にある子項目を取得し、オブジェクトとしてストリームします。 |
New-Item |
指定した場所に新しい項目を作成し、結果オブジェクトをストリーム配信します。 |
Remove-Item |
指定した場所から項目を削除します。 |
Rename-Item |
指定した場所にある項目の名前を変更します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
NavigationCmdletProvider 基本クラス
System.Management.Automation.Provider.NavigationCmdletProvider クラスは、複数のコンテナーを使用する項目に対して操作を実行する Windows PowerShell ナビゲーション プロバイダーを定義します。 このクラスは、基本クラス System.Management.Automation.Provider.ContainerCmdletProvider から派生します。 次の表に、このクラスによって公開されるコマンドレットの一覧を示します。
コマンドレット | 定義 |
---|---|
Combine-Path |
パス間のプロバイダー固有の区切り記号を使用して、2 つのパスを 1 つのパスに結合します。 このコマンドレットは、文字列をストリーミングします。 |
Move-Item |
指定した場所にアイテムを移動します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
関連するコマンドレットは、Windows PowerShell によって提供される基本的な Parse-Path コマンドレットです。 このコマンドレットを使用して Windows PowerShell パスを解析し、Parent
パラメーターをサポートできます。 親パス文字列をストリーミングします。
サポートするプロバイダー インターフェイスの選択
Windows PowerShell の基本クラスの 1 つから派生するだけでなく、Windows PowerShell プロバイダーは、次のプロバイダー インターフェイスの 1 つ以上から派生することで、他の機能をサポートできます。 このセクションでは、これらのインターフェイスと、それぞれでサポートされるコマンドレットを定義します。 インターフェイスでサポートされるコマンドレットのパラメーターについては説明しません。 コマンドレット パラメーター情報は、Get-Command
および Get-Help
コマンドレットを使用してオンラインで使用できます。
IContentCmdletProvider
System.Management.Automation.Provider.IContentCmdletProvider インターフェイスは、データ項目のコンテンツに対する操作を実行するコンテンツ プロバイダーを定義します。 次の表に、このインターフェイスによって公開されるコマンドレットの一覧を示します。
コマンドレット | 定義 |
---|---|
Add-Content |
指定した項目の内容に、指定した値の長さを追加します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
Clear-Content |
指定した項目の内容を "clear" 値に設定します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
Get-Content |
指定した項目の内容を取得し、結果のオブジェクトをストリームします。 |
Set-Content |
指定した項目の既存のコンテンツを置き換えます。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
IPropertyCmdletProvider
System.Management.Automation.Provider.IPropertyCmdletProvider インターフェイスは、データ ストア内のアイテムのプロパティに対して操作を実行するプロパティ Windows PowerShell プロバイダーを定義します。 次の表に、このインターフェイスによって公開されるコマンドレットの一覧を示します。
注
これらのコマンドレットの Path
パラメーターは、プロパティを識別するのではなく、項目へのパスを示します。
コマンドレット | 定義 |
---|---|
Clear-ItemProperty |
指定した項目のプロパティを "clear" 値に設定します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
Get-ItemProperty |
指定した項目からプロパティを取得し、結果のオブジェクトをストリームします。 |
Set-ItemProperty |
指定された値を使用して、指定した項目のプロパティを設定します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
IDynamicPropertyCmdletProvider
system.Management.Automation.Provider.IPropertyCmdletProvider から派生したSystem.Management.Automation.Provider.IDynamicPropertyCmdletProvider インターフェイスは、サポートされているコマンドレットの動的パラメーターを指定するプロバイダーを定義します。 この種類のプロバイダーは、実行時にプロパティを定義できる操作 (たとえば、新しいプロパティ操作) を処理します。 このような操作は、静的に定義されたプロパティを持つ項目では実行できません。 次の表に、このインターフェイスによって公開されるコマンドレットの一覧を示します。
コマンドレット | 定義 |
---|---|
Copy-ItemProperty |
指定した項目から別の項目にプロパティをコピーします。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
Move-ItemProperty |
指定した項目から別の項目にプロパティを移動します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
New-ItemProperty |
指定した項目にプロパティを作成し、結果のオブジェクトをストリームします。 |
Remove-ItemProperty |
指定した項目のプロパティを削除します。 |
Rename-ItemProperty |
指定した項目のプロパティの名前を変更します。 このコマンドレットは、PassThru パラメーターが指定されていない限り、パイプラインを介して出力オブジェクトを渡しません。 |
ISecurityDescriptorCmdletProvider
System.Management.Automation.Provider.ISecurityDescriptorCmdletProvider インターフェイスは、セキュリティ記述子機能をプロバイダーに追加します。 このインターフェイスを使用すると、ユーザーはデータ ストア内のアイテムのセキュリティ記述子情報を取得および設定できます。 次の表に、このインターフェイスによって公開されるコマンドレットの一覧を示します。
コマンドレット | 定義 |
---|---|
Get-Acl |
アクセス制御リスト (ACL) に含まれる情報を取得します。これは、オペレーティング システム リソース (ファイルやオブジェクトなど) を保護するために使用されるセキュリティ記述子の一部です。 |
Set-Acl |
ACL の情報を設定します。 これは、指定したパスに指定された項目 System.Security.AccessControl.ObjectSecurity のインスタンスの形式です。 このコマンドレットは、Windows PowerShell プロバイダーがセキュリティ情報の設定をサポートしている場合、レジストリ内のファイル、キー、サブキー、またはその他のプロバイダー項目に関する情報を設定できます。 |
こちらもご覧ください
Windows PowerShell SDK の
PowerShell