В PowerShell v2 следующая строка:
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
Будет отображаться:
Value : 1
1
Value : 2
Value : 3
Поскольку все элементы были сдвинуты вниз по трубопроводу. Однако в v3 указанная выше строка отображается только:
Value : 1
1
Конвейер остановлен до того, как 2 и 3 будут отправлены на Foreach-Object
(Примечание: переключатель -Wait
для Select-Object
позволяет всем элементам достигнуть блока foreach
).
Как Select-Object
остановить конвейер, и могу ли я теперь остановить конвейер от foreach
или от моей собственной функции?
Изменить: Я знаю, что могу обернуть конвейер в цикле do while while и продолжить работу. Я также обнаружил, что в v3 я могу сделать что-то вроде этого (он не работает в v2):
function Start-Enumerate ($array) {
do{ $array } while($false)
}
Start-Enumerate (1..3)| foreach {if($_ -ge 2){break};$_}; 'V2 Will Not Get Here'
Но Select-Object
не требует ни одного из этих методов, поэтому я надеялся, что существует способ остановить конвейер из одной точки в конвейере.