获取 PSObject 数组大小或计数

Get PSObject array size or count

我创建了一个这样的数组:

$Array = @()

$Item = New-Object PSObject
$Item | Add-Member -Type NoteProperty -Name item1 -Value test
$Item | Add-Member -Type NoteProperty -Name item2 -Value test

$Array += $Item

现在我想添加一个检查以确定 $Item 是否为空,然后再将其添加到 $Array。如何获取 $Item 的成员数?

我试过类似的东西:

$Item.count
$Item.length
@($Item).count
($Item | Measure).count
($Item | Get-Member).count
$Item.psobject.members.count

但是其中 none 给了我实际的会员数。

正确的方法是:

($Item|Get-Member -Type NoteProperty).count

您可以使用隐藏的 .PsObject.Properties 来检查

$Item.PSobject.Properties.Value.count
$Item.PSobject.Properties.Names.count

$Item = New-Object PSObject
$Item.Psobject.Properties.value.count
0

$Item | Add-Member -Type NoteProperty -Name item1 -Value test
$Item.Psobject.Properties.value.count
1

$Item | Add-Member -Type NoteProperty -Name item2 -Value test
$Item.Psobject.Properties.value.count
2

以下 Get_ItemCount 函数可以提供帮助:

Function Get_ItemCount {
    $aux = $($item | Get-Member -MemberType NoteProperty)
    if ( $aux -eq $null ) {
        0
    } elseif ( $aux -is [PSCustomObject] ) {
        1
    } else {
        $aux.Count
    }
}

$Item = New-Object PSObject
Get_ItemCount                  # 0
$Item | Add-Member -Type NoteProperty -Name item1 -Value test
Get_ItemCount                  # 1
$Item | Add-Member -Type NoteProperty -Name item2 -Value test
Get_ItemCount                  # 2

输出

PS D:\PShell> .\SO064810.ps1
0
1
2
PS D:\PShell>