我编写了一个简单的PowerShell过滤器,如果它的日期在指定的开始日期和结束日期之间,则将当前对象推送到管道中.管道下方的对象始终按升序排列,因此一旦日期超过指定的结束日期,我就知道我的工作已完成,我想告诉管道上游命令可以放弃他们的工作以便管道可以完成它的工作.我正在阅读一些非常大的日志文件,我经常想要检查一部分日志.我很确定这是不可能的,但我想问一下.
有可能破坏管道,否则会破坏外部循环或完全停止脚本执行(比如抛出异常).然后解决方案是将管道包装在一个循环中,如果需要停止管道,可以中断该循环.例如,下面的代码将返回管道中的第一个项目,然后通过打破外部do-while循环来中断管道:
do { Get-ChildItem|% { $_;break } } while ($false)
这个功能可以包装成这样的函数,其中最后一行完成与上面相同的操作:
function Breakable-Pipeline([ScriptBlock]$ScriptBlock) { do { . $ScriptBlock } while ($false) } Breakable-Pipeline { Get-ChildItem|% { $_;break } }