2

私はc#でカスタムのPowerShellプロバイダーを作成しようとしています。これにより、ユーザーはアイテムを(フォルダータイプのディレクトリで)管理でき、->ファイル/フォルダーにcdして、子アイテムなどを表示して操作できるようになります。私の問題は、いつでもルートディレクトリに移動できることですが、場所をmyAcme:/ any_path_here_of_valid_itemに設定しようとすると、次のようにエラーが発生します。このパスでアイテムを取得できるので、これは奇妙です。私はここで何かを誤解していますか、それともあなたの場所をアイテムの場所に設定することはできませんか(子アイテムを取得するために私の場所をそのアイテムに設定しようとしています)

PS my****:\> cd myAcme:/
PS myAcme:\> get-item /files/folders/****
<Removed so you don' get hit by a wall of text but this displays the items info fine>
PS myAcme:\> cd myAcme:/files/folders/****
Set-Location : Cannot find path 'myAcme:/files/folders/****' because it does not exist.
At line:1 char:3
+ cd <<<<  myAcme:/files/folders/****
    + CategoryInfo          : ObjectNotFound: (myAcme:/files/folders/****:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

containercmdletproviderの概念を理解していない可能性が高いと確信しているため、ここではコードを表示しません。

編集デバッガーに追加するのを忘れました。コマンドcdmyAcme:/ files / folder / * *を実行すると、ItemExistsがtrueを返します。

4

1 に答える 1

1

ContainerCmdletProviderサブフォルダーを持たない単純なプロバイダー専用です。このようなプロバイダーの例は、PowerShell のfunctionenvおよびvariableドライブです。set-locationこのようなプロバイダは、get-location(cd) またはネストされたパスの概念をサポートしていません。すべてがルートにある必要があり、リーフ ノード (ファイルなど) である必要があります。

ツリー構造を使用する場合は、から継承する必要がありますNavigationCmdletProvider。通常の PowerShell スクリプトを使用して非常に高速にプロバイダーのプロトタイプを作成できるスクリプト化されたプロバイダー フレームワークを使用すると、開発が容易になる場合があります。http://psprovider.codeplex.com/には、いくつかの例と簡単なドキュメント、およびダウンロードがあります。

幸運を!

于 2012-08-03T15:15:43.397 に答える