Я предполагаю, что вы не хотите, чтобы этот флаг был частью результирующего CSV. На мой взгляд, вы можете использовать 2 аналогичных подхода: добавить флаг к обрабатываемому объекту перед его возвратом или обернуть объект в другой объект (который содержит флаг и другое свойство, которое содержит исходный объект).
А пока я собираюсь изучить первый вариант, где вы добавляете свойство. Я собираюсь изменить его с положительного CanContinue
на отрицательное DoNotProcess
, чтобы его несуществование могло слиться с $false
(продолжайте).
Для этого в каждой из ваших функций обработки просто проверьте значение свойства DoNotContinue
. Если это $true
, вернуть полученный исходный объект без дополнительной обработки.
Если это $false
, вы можете выполнить обработку и, если выполнены условия, что обработка должна быть остановлена, вы принудительно добавляете свойство с помощью $true
:
Process {
# processing done
$MyObj |
Add-Member -NotePropertyName DoNotContinue -NotePropertyValue $true -Force -PassThru
}
Все такие команды могут справиться с этим.
Теперь, когда дело доходит до конца конвейера, вы не хотите, чтобы это свойство записывалось в CSV. Для этого удалите его с Select-Object
:
Import-Csv input |
step-1 -env DEV |
step-2 |
step-3 |
Select-Object -Property * -ExcludeProperty DoNotContinue |
Export-Csv result
Бонус:
Вернитесь к моему ответу на другой ваш вопрос и вместо ручной проверки свойства определите его как параметр в ваших командлетах обработки с помощью [Parameter(ValueFromPipelineByPropertyName)]
, например:
param(
[Parameter(ValueFromPipelineByPropertyName)]
[Switch]
$DoNotContinue
)
Зачем это? Потому что вы позволяете PowerShell обрабатывать объект для вас, и вам нужно только проверить значение $DoNotContinue
. Это также позволяет вам переопределить это значение для определенного вызова.
(в этом случае я бы переименовал его в $DoNotProcess
или $SkipProcessing
или что-то еще; помните, что вы также можете использовать [Alias()]
, если хотите, чтобы оно имело несколько имен)