PowerShell для извлечения значения из объекта JSON, который изменяется - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь использовать 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"
  }
}

Здесь я хочу извлечь mailaddress из этого файла с помощью powershell, иприсвойте его переменной.

Проблема, с которой я столкнулся, заключается в том, что верхнее значение "aad. *" постоянно меняется, и я хочу иметь возможность автоматизировать это, чтобы иметь все почтовые адреса в массиве или что-то в этом роде

поэтому я не могу использовать

$yourVariable = (Get-Content 'yourJsonFilePath.json' | ConvertFrom-Json).aad.NTA5YjRjYTItNDFjNi03OTQ1LTlmNTYtM2MyOGI1NWE5MTU5.mailaddress

, потому что значение постоянно меняется

Кто-нибудь знает, как это сделать?

1 Ответ

2 голосов
/ 19 сентября 2019

Что вам нужно будет сделать, это 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"
  }
}
'@

Конвертировать и foreach по PSObject.Propteries:

#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 позволяет вам вызывать более одного значения свойства одновременно,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...