注意:此答案解决了所提出的问题,但是,根据接受的答案来判断,真正的问题一定是不同的。
Select-Object -ExpandProperty identities id, username
为数组中的每个身份输出一个对象。identities
为了包含缺少identities
属性的输入对象,您必须为它们提供占位符虚拟身份,这就是以下代码演示的内容,[pscustomobject] @{ provider='none'; extern_uid='none' }
通过辅助Select-Object
调用使用占位符身份,该辅助调用使用计算的属性来确保属性的存在identities
。
# Sample JSON:
# * The 1st object has *2* identities,
# * the 2nd one none.
$json = '[
{
"id": 45,
"name": "Emilio Roche",
"username": "EROCHE",
"state": "active",
"identities": [
{
"provider": "ldapmain",
"extern_uid": "cn=roche\\, emilio,ou=xxxxxxxxxx"
},
{
"provider": "ad",
"extern_uid": "cn=roche\\, emilio,ou=yyyyyyyyyy"
}
]
},
{
"id": 46,
"name": "A. Non",
"username": "ANON",
"state": "dormant"
}
]'
($json | ConvertFrom-Json) |
Select-Object id, username, @{ n='identities'; e={
if ($_.identities) { $_.identities }
else { [pscustomobject] @{ provider='none'; extern_uid='none' } }
} } |
Select-Object id, username -ExpandProperty identities
以上产生:
provider extern_uid id username
-------- ---------- -- --------
ldapmain cn=roche\, emilio,ou=xxxxxxxxxx 45 EROCHE
ad cn=roche\, emilio,ou=yyyyyyyyyy 45 EROCHE
none none 46 ANON
请注意如何EROCHE
表示两次,每个身份一次。