从Function / Script返回ArrayList

时间:2018-06-13 17:50:47

标签: powershell

给出以下脚本:

function f {
    [CmdletBinding()]Param()
    Write-Verbose 'f: Start'
    $t = New-Object 'System.Collections.ArrayList'
    Write-Verbose $t.GetType().Name
    return $t
}

$things = New-Object 'System.Collections.ArrayList'
$things.GetType().Name
$things = f -verbose
$things.GetType().Name

为什么$things在最后一行不属于ArrayList类型?

1 个答案:

答案 0 :(得分:3)

输出集合(不仅仅是数组)会导致PowerShell默认枚举 - 即,集合的元素将逐个发送到成功输出流。

  • 如果通过捕获变量中的输出来收集这些元素,则始终会获得常规PowerShell数组([object[]])。

要防止这种情况 - 即整体输出 - 请使用Write-Output -NoEnumerate $t

一个较短但有些模糊的选择是将集合包装在单个元素数组中:
Write-Output , $t,它使PowerShell枚举外部数组并按原样输出集合。