In PowerShell v2, la seguente riga:In che modo Select-Object interrompe la pipeline in PowerShell v3?
1..3| foreach { Write-Host "Value : $_"; $_ }| select -First 1
mostrerà:
Value : 1
1
Value : 2
Value : 3
Dal momento che tutti gli elementi sono stati spinti giù la conduttura. Tuttavia, in v3 linea sopra mostra solo:
Value : 1
1
La conduttura viene arrestato prima 2 e 3 vengono inviati Foreach-Object
(Nota: l'interruttore -Wait
per Select-Object
consente a tutti gli elementi di raggiungere il blocco foreach
).
Come si Select-Object
fermare il gasdotto, e possono ora fermare l'oleodotto da un foreach
o dalla mia funzione?
Modifica: So che posso eseguire il wrapping di una pipeline in un do ... while loop e continuare fuori dalla pipeline. Ho anche scoperto che in v3 posso fare qualcosa di simile (non funziona in v2):
function Start-Enumerate ($array) {
do{ $array } while($false)
}
Start-Enumerate (1..3)| foreach {if($_ -ge 2){break};$_}; 'V2 Will Not Get Here'
Ma Select-Object
non richiede una di queste tecniche in modo speravo che ci fosse un modo per fermare la pipeline da un singolo punto della pipeline.
Quindi siete alla ricerca di StopUpstreamCommandsException, ma è possibile lo uso poiché è interno Ecco un suggerimento per MS connect: https://connect.microsoft.com/PowerShell/feedback/details/768650/enable-users-to-stop-pipeline-making-stopupstreamcommandsexception-public –
Grazie, @LarsTruijens per avermi indicato a tale; Ho votato. – Rynant