Как получить всех детей рекурсивно в PowerShell - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу получить все дочерние объекты от Object в сценарии powershell.

У меня есть:

$task = [system.Text.Encoding]::UTF8.GetString((Invoke-WebRequest -Uri "url" -Method GET -ContentType "application/json" -Header $headers).RawContentStream.ToArray()) | ConvertFrom-Json

, поэтому $task - это объект, который содержит свойство tasks, и эти задачи имеют задачи ...

как:

$task : {
            [
                {
                    id: 1,
                    name: "post question",
                    status: "FAILED",
                    tasks: [
                        {
                            id: 10,
                            name: "post answer",
                            status: "PLANNED",
                            tasks: [
                                {

                                }
                            ]
                        },
                        {
                            id: 20,
                            name: "post answer",
                            status: "FAILED",
                            tasks: [
                                {
                                     id: 50,
                                     name: "any text",
                                     status: "PASS",
                                     tasks: [
                                         {

                                         }
                                     ]
                                }                        
                            ]
                        }
                    ]
                },
                {
                    id: 2,
                    name: "Load question",
                    status: "SUCCESS",
                    tasks: [
                        {
                            id: 30,
                            name: "post answer",
                            status: "PLANNED",
                            tasks: [
                                {

                                }
                            ]
                        }
                    ]
                }
            ]
        }

Как я могу получить все tasks от всех tasks ... от моего $task

спасибо в авансовый.

1 Ответ

1 голос
/ 25 февраля 2020

Ваш Json не совсем корректен, поэтому мне нужно было немного его настроить:

$Tasks = ConvertFrom-Json @'
[
    {
        id: 1,
        name: "post question",
        status: "FAILED",
        tasks: [
            {
                id: 10,
                name: "post answer",
                status: "PLANNED",
                tasks: [
                    {

                    }
                ]
            },
            {
                id: 20,
                name: "post answer",
                status: "FAILED",
                tasks: [
                    {
                         id: 50,
                         name: "any text",
                         status: "PASS",
                         tasks: [
                             {

                             }
                         ]
                    }                        
                ]
            }
        ]
    },
    {
        id: 2,
        name: "Load question",
        status: "SUCCESS",
        tasks: [
            {
                id: 30,
                name: "post answer",
                status: "PLANNED",
                tasks: [
                    {

                    }
                ]
            }
        ]
    }
]
'@

На самом деле рекурсивная функция довольно проста:

Function Get-Tasks($Tasks) {
    ForEach($Task in $Tasks) {
        If ($Task.id) {$Task | Select-Object id, name, status}
        If ($Task.Tasks) {Get-Tasks $Task.Tasks}
    }

}

Get-Tasks $Tasks

Результат:

id name          status
-- ----          ------
 1 post question FAILED
10 post answer   PLANNED
20 post answer   FAILED
50 any text      PASS
 2 Load question SUCCESS
30 post answer   PLANNED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...