Powershell"选择 - 第一个0"行为

时间:2017-06-09 17:37:41

标签: powershell powershell-v5.0

有人可以解释下面代码中select -first 0示例中出现的情况吗?

Function Test-Example {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        $InputObject
    )
    process {
        $global:x++
        write-verbose 'I''m running!'
        $InputObject
    }
}

[int]$global:x = 0 #reset the counter
1..100 | Test-Example -Verbose | select -first 10
$global:x #outputs 10

$global:x = 0 #reset the counter
1..100 | Test-Example | select -first 1000
$global:x #outputs 100; as we only iterate 100 times depsite asking for the first 1000

$global:x = 0 #reset the counter
1..100 | Test-Example | select -first 0 
$global:x #outputs 100; which doesn't make sense since we don't see any output, suggesting `select -first 0` behaves like `select * | out-null`.

如果我们添加-verbose开关,我们会看到$global:x的值与根据详细输出的迭代次数匹配(即我们在第一个示例中获得10个详细消息,在第二个示例中获得100个,以及100个在第三)。

1 个答案:

答案 0 :(得分:0)

Select-Object -First 0Select-Object -Last 0

实际上,cmdlet内部检查了这个确切的场景,故意不输出任何内容。

您看到I'm running! 100次的原因是Write-Verbose位于Porcess()块中。所有100个项目都被处理完毕并且没有任何内容,因为代码内部跳过了支票$this.First != 0然后Skipp