2017-08-08 8 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 | % { $_ } 

はい、私は一時変数に/小節数を合計し、ティーコマンドレットを使用することができます。私はこの解決策がパイプを一時停止させると思う。私はまた、一時的に価値があることはメモリ消費に関連する良い解決策ではないと思います。

temp-variableに累積することなくパイプオブジェクトの数を取得できますか?

ありがとうございました。

+0

はどのように '$ PipeCount'を使用する予定がない、そしてなぜ' $ PipeCount ++ 'ソリューションではありませんか? –

+2

パイプのポイントは、一度に1つのオブジェクトだけが話すことになります。将来を予測しようとしていますか?一時変数なしでこれをどうすればいいのか分かりません。 – 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、end block paused pipe。私はそれを望んでいない。 – mazzy

+0

@マークウォッグ、ありがとう。あなたのコードは、パイプが完了した後にパイプ数を取得します。 質問:プロセス内でpipe.countを取得する方法はありますか。 ))) – mazzy

+0

@ gms0ulman、はい。このコメントは以前のバージョンの回答になりました。 このバージョンでは、pipe.countは正しい値のaterコマンドレットを実行します)))) 質問:プロセス内でpipe.countを取得する方法は? – mazzy

関連する問題