2

カスタムPowerShellプロバイダーを実装しています。現在、remove-item コマンドレットの実装に取り​​組んでいます。

RemoveItem メソッドには次のシグネチャがあります。

protected override void RemoveItem(string path, bool recurse)

入力するとRemove-Item .\Myobject -recurse、PowerShell インフラストラクチャによって、RemoveItem メソッドtrueのパラメーターの値が提供されます。recurse

ただし、次のように入力すると、Remove-Item .\MyObject' という質問が表示されます。

MyObject の項目には子があり、Recurse パラメーターが指定されていません。続行すると、すべての子がアイテムとともに削除されます。続行してもよろしいですか?[Y] はい [A] すべてはい [N] いいえ [L] すべていいえ [S] 一時停止 [?] ヘルプ (デフォルトは「Y」):

この質問は、PowerShell インフラストラクチャによって提示されると思います。削除したいオブジェクトはコンテナなので、これで問題ありません。上記の質問に「はい」と答えた場合、PowerShell インフラストラクチャは再帰パラメーターを設定しません。RemoveItem実際、私のメソッドが呼び出されたときは falseです。質問に「はい」と答えたので、パラメーターが true であることを除きます。

私の質問は次のとおりです。

  1. PowerShell が bool recurse パラメーターを正しい値に設定しないのはなぜですか?

  2. 他の方法で値 (質問への回答) を取得する必要がありますか? どのように?

  3. 上記が不可能な場合、質問を抑制する方法はありますか?

4

2 に答える 2

5

最終的に、コンテナを削除するように求められた場合、コンテナに他のコンテナが含まれていない限り、本質的に再帰的です。アクションがユーザーが最初に認識している以上のもの (すべてのコンテナーの内容) に影響を与え、確認を保証するため、PowerShell がプロンプトを表示すると思います。したがって、この場合、-recurse を使用して PowerShell に「自分が何をしているのかわかっている」と伝えることができると思います。

-recurse がより理にかなっているのは、次のようなものを実行する場合です。

Remove-Item *.bak -recurse

この場合、削除するファイルを再帰的に検索します。残念ながら、この使用法では Remove-Item の Recurse パラメータが壊れています-ドキュメントから:

このコマンドレットの Recurse パラメーターに問題があるため、コマンドは Get-Childitem コマンドレットを使用して目的のファイルを取得し、パイプライン演算子を使用してそれらを Remove-Item コマンドレットに渡します。

したがって、現在これを行う方法は次のとおりです。

Get-ChildItem . -r *.bak | Remove-Item
于 2009-11-03T16:29:46.390 に答える
0

設定することで質問を抑制できます$ConfirmPreference="None"

http://blogs.msdn.com/b/powershell/archive/2006/12/15/confirmpreference.aspx

于 2011-08-10T02:40:12.103 に答える