Я пишу командлет, который можно вызвать в середине конвейера. В этом командлете есть параметры с атрибутом ValueFromPipelineByPropertyName , чтобы командлет мог использовать параметры с такими же именами, которые были определены ранее в конвейере.
Парадокс, с которым я столкнулся, заключается в переопределенном методе BeginProcessing () , я использую один из параметров, который может связать его значение с конвейером. Согласно жизненному циклу обработки командлетов 1008 * привязка параметров конвейера не происходит до тех пор, пока после вызова BeginProcessing () . Поэтому кажется, что я не могу полагаться на параметры, связанные с конвейером, если они пытаются использовать в BeginProcessing () .
Я думал о переносе вещей в метод ProcessRecord () . К сожалению, необходимо выполнить относительно дорогостоящую операцию. Лучшее место для этого, по-видимому, - метод BeginProcessing () , чтобы гарантировать, что это происходит только один раз в конвейере.
A несколько вопросов вопрос, окружающий это:
- Есть ли хороший способ обойти это?
- Этим же параметрам также установлен атрибут Обязательный . Как я могу получить это далеко без PowerShell, жалуясь на отсутствие этих обязательных параметров?
Заранее спасибо за ваши мысли.
Обновление
Я снял вторую часть вопроса, так как понял, что недостаточно хорошо понимаю параметры привязки к трубопроводу. Я ошибочно подумал, что параметры привязки к конвейеру взяты из предыдущего командлета , который выполнялся в конвейере. Фактически происходит от объекта , проходящего через конвейер! Я сослался на сообщение Кейта Хилла , чтобы помочь понять это.