Получить размер массива PSObject или количество - PullRequest
0 голосов
/ 08 марта 2019

Я создаю массив следующим образом:

$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

Но ни один из них не дает мне фактического числа членов.

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Вы можете использовать скрытый .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
0 голосов
/ 08 марта 2019

Может помочь следующая функция 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> .\SO\55064810.ps1
0
1
2
PS D:\PShell>
0 голосов
/ 08 марта 2019

Правильный путь:

($Item|Get-Member -Type NoteProperty).count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...