如果一个函数返回了不止一个值,PowerShell会自动将它们包装成一个数组,但是如果你把它通过管道传递给另一个函数,PowerShell又会自动地把它拆成一个个的元素。
如果你想摆脱PowerShell这多管闲事,不想集合被解析成单个元素,而是作为一个整体传递给管道,可以这样做,将你的数组放在另外一个数组中:
#requires -Version 1 function Test-ArrayAsReturnValue1 { param($count) $array = 1..$count return $array } function Test-ArrayAsReturnValue2 { param($count) $array = 1..$count return ,$array } 'Result 1:' Test-ArrayAsReturnValue1 -count 10 | ForEach-Object -Process { $_.GetType().FullName } 'Result 2:' Test-ArrayAsReturnValue2 -count 10 | ForEach-Object -Process { $_.GetType().FullName }
运行上面的例子,我们发现第一个例子逐个处理了我们产生的结果,而第二个例子即使在循环中接收到的也是一个完整的结果。
PS C:\> Result 1: System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 System.Int32 Result 2: System.Object[]
原文链接:Passing Arrays to Pipeline
本文链接: https://www.pstips.net/passing-arrays-to-pipeline.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!