2009-11-03 70 views
2

我正在实施自定义PowerShell提供程序。我现在正在处理remove-item cmdlet实现。PowerShell自定义提供程序RemoveItem

的RemoveItem方法具有以下特征:

protected override void RemoveItem(string path, bool recurse) 

当我键入:Remove-Item .\Myobject -recurse PowerShell的基础设施为我提供了在RemoveItem方法的recurse参数的值true

然而,当我键入:删除-项目\ myObject的”,我得到了一个问题:

该项目在为MyObject有儿童和没有指定Recurse参数进行。如果你继续, 所有的孩子将被删除与该项目。你确定你要继续吗? [Y]是[A]全是[N]否[L]全否暂停帮助(默认为 “Y”)[S] [?]:

我想这个问题提交给我的PowerShell基础设施。这很好,因为我想删除的对象是一个容器。如果我对上述问题回答“是”,PowerShell基础结构不会设置递归参数。实际上,当我调用RemoveItem方法时,它是错误的。我会除了参数是真实的,因为我对这个问题回答是肯定的。

我的问题是:

  1. 为什么PowerShell的不是布尔递归参数设置为正确的价值?

  2. 我是否需要以其他方式获得值(回答问题)?怎么样?

  3. 如果上述不可行,是否有办法抑制这个问题?

回答

5

最终,如果您被要求删除一个容器,那么它本质上是递归的,除非该容器不包含其他容器。我相信PowerShell会提示,因为操作影响比用户最初可能知道的更多(所有容器的内容)并确认确认。所以在这种情况下,我认为-recurse用于告诉PowerShell“我知道我在做什么”。

凡-recurse更有意义是,如果你是这样执行的东西:

Remove-Item *.bak -recurse 

在这种情况下,你要递归搜索文件删除。不幸的是上删除,项目Recurse参数被打破了这种用法 - 从文档:

因为在这个 cmdlet的Recurse参数故障,该命令使用 的Get-Childitem cmdlet来获取 所需的文件,它使用管道运算符 将它们传递给 Remove-Item cmdlet。

所以目前来做到这一点的方法是:

Get-ChildItem . -r *.bak | Remove-Item 
相关问题