项自定义ContainerCmdletProvider上的set-location

时间:2012-08-03 10:48:09

标签: c# powershell provider

我试图在c#中创建一个自定义PowerShell提供程序,允许您管理用户应该能够访问的项目(在文件夹类型目录中) - >文件/文件夹,并能够看到子项等,并操纵它。 我的问题是我总是可以前往根目录但是只要我尝试将我的位置设置为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的概念

EDIT 我忘了添加调试器,当我执行命令cd myAcme时,ItemExists返回true:/ files / folders / * *

1 个答案:

答案 0 :(得分:1)

ContainerCmdletProvider仅适用于没有子文件夹的简单提供程序。此类提供程序的示例是PowerShell中的functionenvvariable驱动器。此类提供程序不支持set-locationget-location(cd)或嵌套路径的概念。一切都应该在根目录中,并且必须是叶子节点(例如文件。)

如果要使用树结构,则必须从NavigationCmdletProvider继承。如果您使用我的脚本化提供程序框架,您可能会发现它更容易开发,该框架允许您使用常规PowerShell脚本非常快速地创建提供程序原型。有一些示例和简单的文档,以及下载,http://psprovider.codeplex.com/

祝你好运!