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 的概念

编辑当我执行命令 cd myAcme:/files/folders/ * *时,我忘记在调试器中添加 ItemExists 正在返回 true

4

1 回答 1

1

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

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

祝你好运!

于 2012-08-03T15:15:43.397 回答