PowerShell从JSON对象中提取值,这会发生变化

PowerShell从JSON对象中提取值,这会发生变化,powershell,Powershell,我正在尝试使用PowerShell从JSON对象提取值,我有以下JSON: { "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5": { "descriptor": "aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5", "directoryAlias": "dis3yv", "displayName": "Tom Test", "domain":

我正在尝试使用PowerShell从JSON对象提取值,我有以下JSON:

{
  "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
允许您一次调用多个属性值