2009-11-03 146 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 
相關問題