繁体   English   中英

如何在powershell中递归获取所有子项

[英]How to get all child recursively in powershell

我想从 Powershell 脚本中的 Object 获取所有孩子。

我有 :

$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

提前致谢。

你的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM