管道和foreach循环

时间:2015-09-10 23:32:33

标签: powershell powershell-v2.0

最近,我一直在玩PowerShell,当我使用管道和foreach循环时,我注意到了一些我无法理解的奇怪行为。

这个简单的代码有效:

$x = foreach ($i in gci){$i.length}
$x | measure -max

有道理。

但是这段代码不会:

foreach ($i in gci){$i.length} | measure -max

我收到以下错误:

An empty pipe element is not allowed.
At line:1 char:33
+ foreach ($i in gci){$i.length} | <<<<  measure -max
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement

这两种方法有什么区别,为什么第二种方法失败?

1 个答案:

答案 0 :(得分:0)

您需要在管道生成的Object之前评估foreach,就像在第一次测试中一样:

$(foreach ($i in gci){$i.length}) | measure -max

或者,在使用它之前,使用%速记来评估它:

gci | % { $_.Length } | measure -max