首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell:函数中的$input值更改

PowerShell:函数中的$input值更改
EN

Stack Overflow用户
提问于 2012-10-30 22:25:53
回答 2查看 319关注 0票数 1

我发现,当我编写以下函数时:

代码语言:javascript
复制
function test {
    Write-Host ($input | Measure-Object).Count
    Write-Host ($input | Measure-Object).Count
}

使用样例输入:

代码语言:javascript
复制
dir | test

它在控制台上写道:

代码语言:javascript
复制
18
0

我想这是因为测量对象的第一个管道覆盖了$input。我知道有一种解决方法,我可以创建一个新的数组并将其传递给其他人:

代码语言:javascript
复制
function test {
    $inp = @($input)
    Write-Host ($inp | Measure-Object).Count
    Write-Host ($inp | Measure-Object).Count
}

然而,我不喜欢它,因为我引入了一个新的变量。有没有一种方法可以在不影响$input的情况下通过管道连接到cmdlet?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-30 22:38:07

试试这个:

代码语言:javascript
复制
function test {    
 Write-Host ($input | Measure-Object).Count
 $input.reset()
 Write-Host ($input | Measure-Object).Count
}

reading about $input enumerator

票数 2
EN

Stack Overflow用户

发布于 2012-10-30 22:38:19

$input是一个ArrayListEnumeratorSimple

代码语言:javascript
复制
C:\Users\roger> $input.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
False    True     ArrayListEnumeratorSimple                System.Object

...which意味着它是一系列项的枚举器。因此,当您消费其中的项目时,您就会用完它们。

我尝试了以下操作:

代码语言:javascript
复制
function foo
{
    $input | select -first 3 | % { Write-Host -ForegroundColor 'Red' $_ }
    $input | % { Write-Host -ForegroundColor 'White' $_ }
}

...to显示,select -first 3吃掉了前3项,但它似乎将它们全部吞下。

尝试执行以下操作:

代码语言:javascript
复制
function bar
{
    $n = 0
    foreach ($x in $input) {
        if ( ++$n -eq 3 ) { break }
        Write-Host -ForegroundColor 'Red' $x
    }

    $input | % { Write-Host -ForegroundColor 'White' $_ }
}

dir | bar

...shows区别。

然而,由于$input是一个枚举器(严格地说是一个IEnumerator),您可以在它上面调用Reset()来倒带它。

请注意,在.NET平台中,并非所有枚举器都可以重置。我不确定在PowerShell中是否有类似$input的场景。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13141077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档