我正在用C#编写PowerShell提供程序.提供程序通过类似驱动器的接口公开应用程序域对象.例如:
my:\Users\joe@blow.com
my:\Customers\Marty
Run Code Online (Sandbox Code Playgroud)
这些数据最终来自数据库.
我一直无法找到任何有关何时应该访问数据库以及何时应该缓存数据的指导.我发现PowerShell多次调用ItemExists和GetChildNames之类的方法; 经常反复为同一个命令.例如,仅仅因为他们点击Tab进行自动完成而去数据库5到6次是不切实际的.
但与此同时,作为命令提示符下的用户,如果我键入Get-ChildItem
(dir
)并查看列表,那么在PowerShell外部执行一些操作以便我知道数据已刷新,另一个目录列表应该会看到任何更改数据库.
我觉得,如果我知道用正确的术语来描述我的问题(用PowerShell的说法),我可以谷歌答案或找到一个现有的重复问题,但我卡住了.
我正在实现自定义PowerShell提供程序.我现在正在处理remove-item cmdlet实现.
RemoveItem方法具有以下签名:
protected override void RemoveItem(string path, bool recurse)
Run Code Online (Sandbox Code Playgroud)
当我输入:Remove-Item .\Myobject -recurse
PowerShell基础结构为我提供了RemoveItem方法true
的recurse
参数值.
但是当我输入:Remove-Item.\ MyObject'我得到一个问题:
MyObject中的项目具有子项,未指定Recurse参数.如果继续,所有孩子将被移除该项目.你确定你要继续吗?[Y]是[A]是全部[N]否[L]否全部[S]暂停[?]帮助(默认为"Y"):
我想这个问题是由PowerShell基础设施呈现给我的.这非常好,因为我要删除的对象是一个容器.如果我对上述问题的回答是肯定的,那么PowerShell基础结构不会设置recurse参数.事实上,当RemoveItem
调用我的方法时它是错误的.我会除了参数是真的,因为我对问题的回答是肯定的.
我的问题是:
为什么PowerShell没有将bool recurse参数设置为正确的值?
我是否需要以其他方式获得价值(回答问题)?怎么样?
如果以上是不可能的,有没有办法压制这个问题?