如何获取管道对象的数量?我不希望累积管道缓冲

时间:2017-08-08 10:32:59

标签: powershell count pipe

假设我有一些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并使用tee cmdlet。我认为这个解决方案可以暂停管道。我认为临时性并不是一个与内存消耗相关的好解决方案。

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

感谢。

2 个答案:

答案 0 :(得分:3)

我认为使用计数器变量是我将使用的解决方案:

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

}

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

答案 1 :(得分:1)

找到了替代答案:

使用Measure-Object

Powershell:

              StatefulBuilder(builder: (context, setState) {
                  return DropdownButton<String>(
                    isExpanded: true,
                    value: item,
                    hint: Text(
                      'Select an item',
                    ),
                    onChanged: (newValue) => {
                      setState(() {
                        item = newValue;
                      })
                    },
                    items: ['A', 'B', 'c'].map((String value) {
                      return DropdownMenuItem<String>(
                        value: value,
                        child: Text(value),
                      );
                    }).toList(),
                  );
                }),

输出:

@(1,2,3) | Measure-Object

Powershell:

Count    : 3
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

输出:

1..5 | Measure-Object -AllStats

在这种情况下:

Powershell:

Count             : 5
Average           : 3
Sum               : 15
Maximum           : 5
Minimum           : 1
StandardDeviation : 1.58113883008419
Property          :

来自herehere

的示例