Поскольку это JSON, вы можете использовать командлет ConvertFrom-Json
для преобразования его в массив объектов PSObject и использовать предложение Where-Object
для фильтрации необходимых вам объектов:
$json = @'
[
{
"name": "kernel",
"change_flag": "FALSE",
"unpack": "FALSE",
"extension": "jar",
"fileinfo": [
{
"localPath": "Local path",
"fileName": "kernel.jar",
"filePath": "setupfiles\\controlroom"
}
]
},
{
"name": "activemq",
"change_flag": "FALSE",
"unpack": "FALSE",
"extension": "jar",
"fileinfo": [
{
"localPath": "Local path",
"fileName": "activemq.jar",
"filePath": "setupfiles\\controlroom"
}
]
},
{
"name": "certmgr",
"change_flag": "FALSE",
"unpack": "FALSE",
"extension": "jar",
"fileinfo": [
{
"localPath": "Local path",
"fileName": "certmgr.jar",
"filePath": "setupfiles\\controlroom"
}
]
},
{
"name": "zipzoom",
"extension": "jar",
"change_flag": "TRUE",
"unpack": "TRUE",
"fileinfo": [
{
"localPath": "Local path",
"fileName": "zipzoom.jar",
"filePath": "destpath1"
},
{
"localPath": "Local path",
"fileName": "localpath2\\file2",
"filePath": "destpath2\\"
}
]
}
]
'@
$result = ($json | ConvertFrom-Json) |
Where-Object { $_.change_flag -eq 'TRUE' -and $_.unpack -eq 'TRUE' } |
Select-Object name, extension, fileinfo
# output
$result
Вывод на экране:
name extension fileinfo
---- --------- --------
zipzoom jar {@{localPath=Local path; fileName=zipzoom.jar; filePath=destpath1}, @{localPath=Local path; fileName=localpath2\file2; filePath=destpath2\}}
Поскольку детали fileinfo
также являются объектами со своими собственными свойствами, если вы хотите получить их по отдельности, вы можете сделать:
$result[0].fileinfo # get the object by index
Или отфильтровать объект по имени:
($result | Where-Object { $_.name -eq 'zipzoom' }).fileinfo
для возврата
localPath fileName filePath
--------- -------- --------
Local path zipzoom.jar destpath1
Local path localpath2\file2 destpath2\