В PowerShell v2 будет отображаться следующая строка:
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
Будет отображаться:
Value : 1
1
Value : 2
Value : 3
Поскольку все элементы были переданы в конвейер. Однако в версии 3 отображается только приведенная выше строка:
Value : 1
1
Конвейер останавливается до того, как 2 и 3 будут отправлены в Foreach-Object
(Примечание: переключатель -Wait
для Select-Object
позволяет всем элементам достигать блока foreach
).
Как Select-Object
останавливает конвейер, и могу ли я теперь остановить конвейер из foreach
или из моей собственной функции?
Изменить: Я знаю Я могу обернуть конвейер в цикл do ... 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
не требует ни одного из этих методов, поэтому я надеялся, что там был способом остановить конвейер из одной точки на конвейере.