我正在实施一个自定义电源外壳 http://en.wikipedia.org/wiki/Windows_PowerShell提供者。我现在正在研究remove-item cmdlet 实现。
RemoveItem 方法具有以下签名:
protected override void RemoveItem(string path, bool recurse)
当我输入:Remove-Item .\Myobject -recurse
PowerShell 基础设施为我提供了价值true
in the recurse
RemoveItem 方法的参数。
但是,当我输入:Remove-Item .\MyObject' 时,我收到一个问题:
MyObject 中的项目有子项,并且未指定 Recurse 参数。如果你继续,
所有儿童都将与该物品一起被带走。你确定你要继续吗?
[Y] 是 [A] 全部是 [N] 否 [L] 全部否 [S] 暂停 [?] 帮助(默认为“Y”):
我想这个问题是由 PowerShell 基础设施向我提出的。这完全没问题,因为我要删除的对象是一个容器。如果我对上述问题的回答是“是”,则 PowerShell 基础结构不会设置递归参数。事实上,当我的RemoveItem
方法被调用。我希望参数为 true,因为我对这个问题的回答是“是”。
我的问题是:
为什么 PowerShell 不将 bool recurse 参数设置为正确的值?
我是否需要以其他方式获取值(问题的答案)?如何?
如果上述不可能,有没有办法抑制这个问题?
最终,如果您被要求删除一个容器,那么它本质上是递归的,除非该容器不包含其他容器。我相信 PowerShell 会进行提示,因为该操作的影响超出了用户最初可能意识到的范围(所有容器的内容),并且需要确认。所以在这种情况下,我认为 -recurse 用于告诉 PowerShell“我知道我在做什么”。
-recurse 更有意义的地方是如果你要执行这样的事情:
Remove-Item *.bak -recurse
在这种情况下,您想要递归搜索要删除的文件。不幸的是,Remove-Item 上的 Recurse 参数对于这种用法已损坏 - 来自文档:
因为这里的Recurse参数
cmdlet 有错误,该命令使用
Get-Childitem cmdlet 来获取
所需的文件,并且它使用
管道操作员将它们传递给
删除项目 cmdlet。
所以目前的做法是:
Get-ChildItem . -r *.bak | Remove-Item
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)