パイプラインの途中で呼び出すことができるコマンドレットを作成しています。このコマンドレットには、ValueFromPipelineByPropertyName属性が定義されたパラメーターがあり、コマンドレットは以前にパイプラインで定義された同じ名前のパラメーターを使用できます。
私が遭遇したパラドックスは、オーバーライドされたBeginProcessing()メソッドにあります。パイプラインからバインドされた値を取得できるパラメーターの 1 つを利用します。Cmdlet Processing Lifecycleによると、パイプライン パラメーターのバインディングは、 BeginProcessing()が呼び出されるまで発生しません。したがって、 BeginProcessing()で使用しようとしている場合、パイプラインにバインドされたパラメーターに依存できないようです。
ProcessRecord()メソッドに移行することを考えました。残念ながら、発生する必要がある 1 回限りの比較的高価な操作があります。これが発生するのに最適な場所は、パイプラインで一度だけ発生することを保証するために、 BeginProcessing()メソッドにあるようです。
これに関するいくつかの質問:
- これを回避する良い方法
はありますか?
これらの同じパラメーターには、必須属性も設定されています。これらの必須パラメーターがないことについて PowerShell が不平を言うことなく、どうすればここまで到達できるでしょうか?
ご意見ありがとうございます。
アップデート
パイプラインにバインドされたパラメーターを十分に理解していないことに気付いたので、質問の2番目の部分を取り出しました。パイプラインにバインドされたパラメーターは、パイプラインで実行された以前の コマンドレットからのものであると誤って考えました。実際には、パイプラインを通過するオブジェクトから取得されます! これを理解するために、Keith Hillの投稿を参照しました。