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