Как Select-Object останавливает конвейер в PowerShell v3?

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

10
задан Rynant 5 January 2012 в 22:08
поделиться