В 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 и продолжить его выполнение. Я также обнаружил, что в 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
не требует ни одного из этих методов, поэтому я надеялся, что есть способ остановить конвейер из одной точки в конвейере.