PowerShell从JSON对象中提取值,这会发生变化
我正在尝试使用PowerShell从JSON对象提取值,我有以下JSON:PowerShell从JSON对象中提取值,这会发生变化,powershell,Powershell,我正在尝试使用PowerShell从JSON对象提取值,我有以下JSON: { "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5": { "descriptor": "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5", "directoryAlias": "dis3yv", "displayName": "Tom Test", "domain":
{
"aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5": {
"descriptor": "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5",
"directoryAlias": "dis3yv",
"displayName": "Tom Test",
"domain": "ea80952e-a476-42d4-aaf4-5457awesfre",
"legacyDescriptor": null,
"mailAddress": "Tom.Test@email.com",
"metaType": "member",
"origin": "aad",
"originId": "919579e1-6e98-47fd-adb3-3d52d0467037",
"principalName": "Tom.Test@email.com"
},
"aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi": {
"descriptor": "aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi",
"directoryAlias": "cup7mz",
"displayName": "Dummy May",
"domain": "ea80952e-a476-42d4-aaf4-5457852b0f7e",
"legacyDescriptor": null,
"mailAddress": "Dummy.May@mail.com",
"metaType": "member",
"origin": "aad",
"originId": "71e2fa85-59f0-4d8f-a5a9-4ff3e23d01d9",
"principalName": "James.May@mail.com",
"subjectKind": "user"
}
}
在这里,我想使用powershell从该文件中提取mailaddress,并将其分配给变量
我遇到的问题是,最大值“aad.*”不断变化,我希望能够自动执行此操作,以便将所有邮件地址都放在一个数组或其他东西中
所以我不能用
$yourVariable=(获取内容“yourJsonFilePath.json”|从json转换而来)。aad.nta5yjrjryttndfjni03otq1ltlmnTytm2mygi1nwe5mtu5.mailaddress
因为值一直在变化
有人知道怎么做吗?您需要做的是通过
PSObject.Properties
为了简单起见,我将json分配给脚本中的一个变量作为示例。您仍然可以从文件位置调用它:
$jsonFile = @'
{
"aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5": {
"descriptor": "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5",
"directoryAlias": "dis3yv",
"displayName": "Tom Test",
"domain": "ea80952e-a476-42d4-aaf4-5457awesfre",
"legacyDescriptor": null,
"mailAddress": "Tom.Test@email.com",
"metaType": "member",
"origin": "aad",
"originId": "919579e1-6e98-47fd-adb3-3d52d0467037",
"principalName": "Tom.Test@email.com"
},
"aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi": {
"descriptor": "aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi",
"directoryAlias": "cup7mz",
"displayName": "Dummy May",
"domain": "ea80952e-a476-42d4-aaf4-5457852b0f7e",
"legacyDescriptor": null,
"mailAddress": "Dummy.May@mail.com",
"metaType": "member",
"origin": "aad",
"originId": "71e2fa85-59f0-4d8f-a5a9-4ff3e23d01d9",
"principalName": "James.May@mail.com",
"subjectKind": "user"
}
}
'@
通过PSObject.properties
转换和foreach
:
#convert
$jsonObject = ($jsonFile | ConvertFrom-Json)
#display all Mailaddress
$jsonObject.PSObject.Properties | %{$_.Value.MailAddress}
在您的示例中,它应该是:
$yourVariable.PSObject.Properties | %{$_.Value.MailAddress}
如果您不想foreach
,可以这样直接调用它:
$yourVariable.PSObject.Properties.Value.MailAddress
但是,
foreach
允许您一次调用多个属性值 您需要通过PSObject.Properties
为了简单起见,我将json分配给脚本中的一个变量作为示例。您仍然可以从文件位置调用它:
$jsonFile = @'
{
"aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5": {
"descriptor": "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5",
"directoryAlias": "dis3yv",
"displayName": "Tom Test",
"domain": "ea80952e-a476-42d4-aaf4-5457awesfre",
"legacyDescriptor": null,
"mailAddress": "Tom.Test@email.com",
"metaType": "member",
"origin": "aad",
"originId": "919579e1-6e98-47fd-adb3-3d52d0467037",
"principalName": "Tom.Test@email.com"
},
"aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi": {
"descriptor": "aad.NmE5ODg4ODQtM2EyNS03ZjBiLWI0OTItN2JmMDA1MzVkNmJi",
"directoryAlias": "cup7mz",
"displayName": "Dummy May",
"domain": "ea80952e-a476-42d4-aaf4-5457852b0f7e",
"legacyDescriptor": null,
"mailAddress": "Dummy.May@mail.com",
"metaType": "member",
"origin": "aad",
"originId": "71e2fa85-59f0-4d8f-a5a9-4ff3e23d01d9",
"principalName": "James.May@mail.com",
"subjectKind": "user"
}
}
'@
通过PSObject.properties
转换和foreach
:
#convert
$jsonObject = ($jsonFile | ConvertFrom-Json)
#display all Mailaddress
$jsonObject.PSObject.Properties | %{$_.Value.MailAddress}
在您的示例中,它应该是:
$yourVariable.PSObject.Properties | %{$_.Value.MailAddress}
如果您不想foreach
,可以这样直接调用它:
$yourVariable.PSObject.Properties.Value.MailAddress
但是,foreach
允许您一次调用多个属性值