簡體   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