Điều tôi đang cố gắng thực hiện là có chức năng dừng nguồn cấp dữ liệu đường ống khi đạt đến giới hạn thời gian. Tôi đã tạo một chức năng thử nghiệm như sau:Dừng đường ống PowerShell, đảm bảo kết thúc được gọi là
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" }
}
Điều này chắc chắn sẽ dừng đường ống, nhưng nó không bao giờ gọi khối "cuối {}" của tôi, trong trường hợp này là rất quan trọng. Có ai biết tại sao khối "end {}" của tôi không được gọi khi tôi ngừng sử dụng đường dẫn "tiếp tục" không? Hành vi có vẻ giống nhau nếu tôi ném một PipelineStoppedException.
Có lẽ 'tiếp tục' nhảy ra khỏi vòng chứa của nó chỉ có không có để nó nhảy rõ ràng về toàn bộ chức năng của bạn. Đó không phải là chính xác mặc dù hữu ích. Tôi không chắc chắn nếu có một cách thích hợp để làm những gì bạn đang cố gắng làm ở đây. –
Như tôi đã hiểu, các lệnh ghép ngắn như Select-Object -First 1 sẽ tăng StopUpstreamCommandsException để dừng đường dẫn, ngoại lệ bên trong và không hiển thị cho mục đích sử dụng của riêng tôi. :( –
Có thể đặt quá trình xử lý 'end {}' của bạn thành một đoạn mã lệnh khác mà bạn có thể gọi từ mệnh đề 'else {}' bên trong 'process {}'? –