使用pscustomobjects在PowerShell中计算数组的属性

时间:2015-07-20 10:24:20

标签: powershell

如果数组只有一个CustomObjects且Count属性为null。的为什么吗

如果仅使用字符串,则Count属性为1。

function MyFunction
{
    $Objects = @()
    $Objects += [pscustomobject]@{Label = "Hallo"}
    # $Objects += [pscustomobject]@{Label = "World"}

    $Objects
}

$objs = MyFunction
Write-Host "Count: $($objs.Count)"

输出:"Count: "因为$objs.Countnull

function MyFunction
{
    $Objects = @()
    $Objects += [pscustomobject]@{Label = "Hallo"}
    $Objects += [pscustomobject]@{Label = "World"}

    $Objects
}

$objs = MyFunction
Write-Host "Count: $($objs.Count)"

输出:"Count: 2"

如果我添加字符串,行为会有所不同

function MyFunction
{
    $Objects = @()
    $Objects += "Hallo"
    # $Objects += [pscustomobject]@{Label = "World"}

    $Objects
}

$objs = MyFunction
Write-Host "Count: $($objs.Count)"

输出:"Count: 1"

1 个答案:

答案 0 :(得分:3)

即使嵌套数组由一个对象构成,也可以强制该函数返回一个数组。

function MyFunction
{
    $Objects = @()
    $Objects += [pscustomobject]@{Label = "Hallo"}
    # $Objects += [pscustomobject]@{Label = "World"}
    return ,$Objects
}

即使提供的$Objects已经是一个包含多个对象的数组,该逗号也会显式转换为数组。这会强制构造具有一个元素的数组。在外面,Powershell会对一项数组进行unboxing,所以如果有一个数组,你将得到一个数组,所以这个方法适用于使用单项数组的默认Powershell行为。您体验Count为1,因为在Powershell 3.0 Microsoft fixed one-item arrays by adding Count property to every object中,一个对象的索引返回Count为1,而$null返回零,但{{1}由于自然原因声明它们可以包含自己的PSCustomObject属性,因此不包含自定义对象的默认Count属性。这就是为什么如果只有一个对象,你就不会得到Count

Count的行为可以在以下示例中看到:

,

输出:

  

PS K:> (合).Count之间的

     

VERBOSE:1

     

2