我收集了一些具有ID,用户名,电子邮件,current_sign_in_at和identities等属性的对象。 Identities属性是具有两个属性的对象的数组。这将是对象的json表示形式:
{
"id": 45,
"name": "Emilio Roche",
"username": "EROCHE",
"state": "active",
"identities": [
{
"provider": "ldapmain",
"extern_uid": "cn=roche\\, emilio,ou=xxxxxxxxxx"
}
]
}
但是列表中的某些元素没有identities属性。所以,当我这样做时:
Get-Collection | Select-Object id, username -ExpandProperty identities
我仅获得具有identities属性的那些元素。我需要所有带有或不带有身份属性的实体
答案 0 :(得分:5)
如果没有太多要处理的属性,则可以使用以下内容:
Get-Collection | Select-Object id,
username,
@{n='provider';e={$_.identities.provider}},
@{n='extern_uid';e={$_.identities.extern_uid}}
对于那些没有$null
属性的对象,这将在属性provider
和extern_uid
上返回identities
:
id username provider extern_uid
-- -------- -------- ----------
45 EROCHE ldapmain cn=roche\, emilio,ou=xxxxxxxxxx
46 EROCHE
编辑
正如mklement0所指出的,如果identities属性包含多个对象,则该方法将无效。
mklement0的答案可以很好地解决这个问题,应该是公认的答案。
答案 1 :(得分:2)
注意:此答案解决了所问的问题,但是,根据接受的answer来看,实际的问题肯定有所不同。 >
Select-Object -ExpandProperty identities id, username
为identities
数组中的每个个人身份输出一个对象。
为了包括缺少identities
属性的输入对象,因此必须为其提供 placeholder 伪身份,这是下面的代码通过使用calculated property来确保存在[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
两次表示一次,每个身份一次。