En PowerShell v2, la siguiente línea:¿Cómo detiene Select-Object la canalización en PowerShell v3?
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
pantalla Would:
Value : 1
1
Value : 2
Value : 3
Dado que todos los elementos fueron empujados por la tubería. Sin embargo, en v3 la línea anterior sólo muestra:
Value : 1
1
La tubería se detiene antes de 2 y 3 son enviados a Foreach-Object
(Nota: el interruptor de -Wait
para Select-Object
permite que todos los elementos para alcanzar el bloque foreach
).
¿Cómo detiene Select-Object
la tubería, y ahora puedo detener la tubería desde un foreach
o desde mi propia función?
Editar: Sé que puedo envolver una tubería en un bucle do ... while y continuar fuera de la tubería. También he encontrado que en la versión 3 que puedo hacer algo como esto (que no funciona en la versión 2):
function Start-Enumerate ($array) {
do{ $array } while($false)
}
Start-Enumerate (1..3)| foreach {if($_ -ge 2){break};$_}; 'V2 Will Not Get Here'
Pero Select-Object
no requiere cualquiera de estas técnicas así que esperaba que hubiera una manera de detener la tubería desde un solo punto en la tubería.
por lo que busca StopUpstreamCommandsException, pero se puede no lo uso ya que es interno. Aquí hay una sugerencia de MS connect para ello: https://connect.microsoft.com/PowerShell/feedback/details/768650/enable-users-to-stop-pipeline-making-stopupstreamcommandsexception-public –
Gracias, @LarsTruijens por señalarme a ese; Lo voté. – Rynant