[英]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.