【发布时间】:2016-01-28 13:14:14
【问题描述】:
我想要做的是获得一个功能来在达到时间限制时停止管道馈送。我创建了一个测试函数如下:
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" }
}
这肯定会停止管道,但它永远不会调用我的“end{}”块,在这种情况下,它是至关重要的。有谁知道为什么当我使用“继续”停止管道时没有调用我的“结束{}”块?如果我抛出 PipelineStoppedException,行为似乎是相同的。
【问题讨论】:
-
大概
continue正在跳出它的包含循环,只是没有一个,所以它跳出了你的整个函数。不过,这并不完全有帮助。我不确定是否有合适的方法来做你想做的事情。 -
据我了解,诸如 Select-Object -First 1 之类的 cmdlet 将引发 StopUpstreamCommandsException 以停止管道,这是一个内部异常,对我自己的使用不可见。 :(
-
也许将您的
end{}处理放入一个不同的脚本块中,您可以从process{}中的else{}子句调用它? -
Pipeline.Stop 方法似乎也很有用,但我有限的 powershell 知识意味着我无法弄清楚如何在快速测试中使其工作。
-
发现了一些类似的问题,可能值得看一下stackoverflow.com/questions/28522507/…
标签: powershell pipeline powershell-4.0