Мои навыки 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
}
}
Не так сложно, как ответ, но мне это помогло.
🤔 А знаете ли вы, что...
PowerShell имеет встроенные средства для администрирования и мониторинга серверов и сетей.
Поскольку ваш 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