Перебор объекта JSON

Мои навыки PS в лучшем случае заржавели. Но, по-видимому, наиболее подходящим инструментом является столкновение с пользователями в AD PS.

Мне нужно обновить некоторые свойства пользователя в нашем AD. Для этого я создал файл JSON (примерно так):

{
   "xyz" : {
      "title" : "Leerling Copernicus SG, klas: 2MH1A",
      "displayName" : "Student xyz",
      "surname" : "xyz"
   },
   "abc" : {
      "displayName" : "Student abc",
      "givenname" : "Student"
   }
}

На самом деле существует более 4000 пользователей, и свойства, которые нужно изменить, варьируются от пользователя к пользователю.

Некоторый поиск в Google показал мне, что я могу создать объект PS из этого файла, выполнив

$json = Get-Content -Path 'C:\somewhere\mutaties.json' -Raw|ConvertFrom-Json

после этого я ожидал, что смогу перебирать объект, например

foreach ($user in $json) {
  foreach ($property in $user) {
    // do something smart
  }
}

Но это совершенно не работает. На первой итерации кажется, что $user содержит весь объект.

Кроме того: как мне получить доступ к ключам учетной записи, таким как xyz и abc, и именам свойств?

Обновлено: вот что я придумал:

$jsonObject = Get-Content -Path 'C:\somewhere\mutaties.json' -Raw|ConvertFrom-Json

foreach ($user in $jsonObject.psobject.Properties) {
    $key =  $user.name
    $properties = $user.VALUE
    write-host $key

    foreach ($property in $properties.psobject.Properties) {
        $name = $property.Name
        $value = $property.VALUE
        write-host `t $name`t $value
    }
}

Не так сложно, как ответ, но мне это помогло.

Этот вопрос похож на: Как перебрать объект json в PowerShell. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

Filburt 28.08.2024 17:40

Вы можете изменить формат json, в котором у вас есть массив свойства с именем «пользователь».

js2010 28.08.2024 17:50
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ваш Json представляет собой один объект, вам нужно будет выполнить перечисление свойств объекта, для этого вы можете получить доступ к .PSObject.Properties. Пример того, как вы можете подойти к своему коду:

foreach ($user in $json.PSObject.Properties) {
    $properties = @{}
    foreach ($property in $user.Value.PSObject.Properties) {
        $properties[$property.Name] = $property.Value
    }

    @{
        user       = $user.Name
        properties = $properties
    }
}

# Name                           Value
# ----                           -----
# properties                     {[surname, xyz], [displayName, Student xyz], [title, Leerling Copernicus SG, klas: 2MH1A]}
# user                           xyz
# properties                     {[givenname, Student], [displayName, Student abc]}
# user                           abc

Кто-то предложил другую тему, в результате чего получилось нечто похожее:

Peter 28.08.2024 18:07

Другие вопросы по теме