PowerShell Object в объекте - PullRequest
       17

PowerShell Object в объекте

1 голос
/ 29 апреля 2020

У меня есть следующий код:

$Car = [PSCustomObject] @{
    Tire          = [PSCustomObject] @{
        Color = "Black"
        Count = 4
    }

    SteeringWheel = [PSCustomObject]@{
        Color   = "Blue"
        Buttons = 15
    }
}

Теперь я хочу вывести объект с помощью командлета Format-List. Это приводит к следующей редакции:

Tire          : @{Color=Black; Count=4}
SteeringWheel : @{Color=Blue; Buttons=15}

Я хотел бы получить вывод следующим образом:

Tire:
    Color:      Black
    Count:      4
SteeringWheel:
    Color:      Blue
    Buttons:    15

Вывод должен быть динамическим c. Я не хочу вручную получать доступ к отдельным атрибутам, как в следующем примере:

$Car.Tire
$Car.SteeringWheel

Большое вам спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

Мы можем использовать System.Management.Automation.PSObject.Members для извлечения членов из System.Management.Automation.PSCustomObject. Затем мы можем использовать Where-Object, чтобы отфильтровать членов, которые имеют свойство System.Management.Automation.PSMemberInfo.MemberType, равное NoteProperty.

$Car = [PSCustomObject] @{
    Tire = [PSCustomObject] @{
        Color = "Black"
        Count = 4
    }
    SteeringWheel = [PSCustomObject]@{
        Color   = "Blue"
        Buttons = 15
    }
}

foreach ($object in $Car) {
    $members = $object.PSObject.Members | 
        Where-Object {$_.MemberType -eq "NoteProperty"}

    foreach ($member in $members) {
        "$($member.Name):"

        $values = $member.Value.PSObject.Members | 
            Where-Object {$_.MemberType -eq "NoteProperty"}

        foreach ($value in $values) {
            "`t$($value.Name):$($value.Value)"
        }
    }
}

Вывод:

Tire:
    Color:Black
    Count:4
SteeringWheel:
    Color:Blue
    Buttons:15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...