Quello che sto cercando di fare è ottenere una funzione per fermare l'avanzamento gasdotto quando è stato raggiunto un limite di tempo. Ho creato una funzione di test come segue:Fermare PowerShell gasdotto, garantire fine si chiama
function Test-PipelineStuff
{
[cmdletbinding()]
Param(
[Parameter(ValueFromPipeLIne=$true)][int]$Foo,
[Parameter(ValueFromPipeLIne=$true)][int]$MaxMins
)
begin {
"THE START"
$StartTime = Get-Date
$StopTime = (get-date).AddMinutes($MaxMins)
"Stop time is: $StopTime"
}
process
{
$currTime = Get-Date
if($currTime -lt $StopTime){
"Processing $Foo"
}
else{
continue;
}
}
end { "THE END" }
}
Questo sarà certamente fermare la pipeline, ma non è mai chiama il mio "end {}" blocco, che, in questo caso, è di vitale importanza. Qualcuno sa perché il mio blocco "end {}" non viene chiamato quando interrompo la pipeline usando "continue"? Il comportamento sembra essere lo stesso se lancio una PipelineStoppedException.
Presumibilmente 'CONTINUE sta saltando fuori del suo ciclo che contiene solo non ce n'è uno in modo che salta chiaro della vostra intera funzione. Questo non è esattamente utile però. Non sono sicuro se c'è un modo corretto di fare ciò che stai cercando di fare qui. –
A quanto ho capito, i cmdlet come Select-Object -First 1 generano StopUpstreamCommandsException per interrompere la pipeline, che è un'eccezione interna e non visibile per uso personale. :( –
Forse metti l'elaborazione 'end {}' in un diverso scriptblock che puoi chiamare dalla clausola 'else {}' all'interno di 'process {}'? –