Co próbuję zrobić, to uzyskać funkcję zatrzymania podawania potoku po osiągnięciu limitu czasu. Utworzyłem funkcję testową następująco:Zatrzymywanie potoku PowerShell, upewnij się, że koniec nazywa się
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" }
}
Będzie to z pewnością zatrzymać rurociągu, ale nigdy nie wywołuje mój koniec „{}” blok, który w tym przypadku jest bardzo istotne. Czy ktoś wie dlaczego mój blok "end {}" nie jest wywoływany, gdy zatrzymuję potok używając "kontynuuj"? Zachowanie wydaje się być takie samo, jeśli rzucam wyjątek PipelineStoppedException.
Przypuszczalnie 'kontynuuj' wyskakuje z pętli z zawartością, ale nie ma żadnej, więc przeskakuje całą twoją funkcję. To jednak nie jest zbyt pomocne. Nie jestem pewien, czy istnieje właściwy sposób robienia tego, co próbujesz zrobić tutaj. –
Jak rozumiem, polecenia cmdlet, takie jak Select-Object -First 1, zwiększą wyjątek StopUpstreamCommandsException, aby zatrzymać potok, który jest wyjątkiem wewnętrznym i niewidoczny dla mojego własnego użytku. :( –
Może umieścić swoje 'end {}' w innym bloku skryptowym, który możesz wywołać z klauzuli 'else {}' wewnątrz 'process {}'? –