2017-08-08 24 views
2

假设我有一些PowerShell代码:如何获取管道对象的数量?我不想累积管缓冲

function count-pipe { 
    [CmdletBinding()] 
    param (
     [Parameter(ValueFromPipeline=$true)] 
     [object[]]$inputObject 
    ) 

    process { 
     $PipeCount = <# How to get count of the pipe? Expect: #> 5 

     Write-Output $inputObject # path-throw 
    } 
} 

1..5 | count-pipe | % { $_ } 

是的,我可以总结/测量计数到临时变量和使用tee cmdlet的。我认为这个解决方案会暂停管道。我认为temp-valiable不是一个很好的解决方案,涉及内存消耗。

我可以在没有累积到临时变量的情况下获得管道对象数吗?

谢谢。

+0

您打算如何使用'$ PipeCount',为什么不'$流水计数++'的解决方案? –

+2

管道的重点是在那里只有一个物体可以这么说。你试图预测未来呢?不知道你怎么会做这个没有临时变量 – Matt

回答

3

我想用一个计数器变量的解决方案,我会用:

function count-pipe { 
    [CmdletBinding()] 
    param (
     [Parameter(ValueFromPipeline=$true)] 
     [object[]]$InputObject 
    ) 
    Process { 
     $PipeCount++ 
     $_ 
    } 
    End { 
     Write-Verbose $PipeCount 
    } 

} 

'a','b' | count-pipe -verbose | % { $_ } 
+0

@ gms0ulman,结束块暂停管道。我不想要它。 – mazzy

+0

@Mark Wragg,谢谢。管道完成后,您的代码将获得管道计数。 问题是:如何获取pipe.count内部进程? ))) – mazzy

+0

@ gms0ulman,是的。这个评论是以前版本的答案。 使用此版本pipe.count采取正确的值ater cmdlet运行))) 问题是:如何获取pipe.count内部进程? – mazzy