ここSOや他の場所では-Confirm
、コマンドレット全体をネストされたコマンドレットなどに伝播する方法を説明する質問がたくさんあります。しかし、私が見つけられないのは、そのプロンプトへの応答を伝播する方法です。つまり、ユーザーがこのプロンプトに答えると...
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
...私のコマンドレットは、そのプロンプトに対するユーザーの応答に基づいて動作する可能性があると合理的に推測できます。Suspend [S]
との両方Help [?]
がローカライズされた操作であり、それらは正常に機能します。
Yes to All
しかし、私の主な問題は、とを認識して行動することNo to All
です。C# ( via Cmdlet.ShouldProcess()
) と PowerShell ( via )$PSCmdlet.ShouldProcess()
の両方で、推測できるブール値の結果しか得られません。
true
[Y] または [A] のいずれかです。false
[N] または [L] のいずれかです。
私は当初、そのように文書化されていませんが、ShouldContinue
内部コマンドレットの状態を利用してこの区別を行うことを期待していましたが、スクリプト化されたコマンドレットを使用した実験では、そうではないことが示されました。
実際、私がこれまでに見つけた唯一の可能な回避策は、おそらく「公式」が導入される前の、PowerShell の Should-Process 関数の Jeffrey Snover による初期の表現(2007 年頃!) です。Cmdlet.ShouldProcess
$PSCmdlet.ShouldProcess
PowerShell チームが Yes/Yes to All と No/No to All を区別できるようにするのを忘れたとは信じがたいです。むしろ、私はそれを見過ごしているだけだと思います。
簡単に言えば、私の質問は次のとおりです。コンパイルされたコマンドレットとスクリプト化されたコマンドレットの両方について、どのように区別できますYes
か?Yes to All
No
No to All