我正在尝试编写一个与Rest API交互的脚本,以在active directory中进行更改(我知道这没有多大意义,但这是我们公司的做法(。更改是为了修改属于特定安全组的用户列表的homeDirectory属性。用户的并不都在同一个域中,而是在同一林中,并在全局编录中注册。
到目前为止,这就是我的工作原理:
function get-groupusers{
$memberlist = get-adgroup -filter "name -eq 'group.users'" -server "server.domain.com" -property member |select -expandproperty member
$GlobalCatalog = Get-ADDomainController -Discover -Service GlobalCatalog
foreach ($member in $memberlist){
get-aduser -identity $member -server "$($GlobalCatalog.name):3268"
}
}
$sAMAccountName = (get-groupusers).samaccountname
这是我遇到问题的部分:
foreach($an in $SamAccountName){
$json = @{
input = @{
key = "homeDirectory"
value = "\filepath$an"
}
}
}
这里的目标是将哈希表转换为json(与API交互所需的格式(,并将其保存为以下格式(注意,"输入"键"one_answers"值"键都是API实际使用的,而不仅仅是替换(:
{
"input":{
"key":"homeDirectory",
"value":"\\filepath\$an"
},
{
"key":"homeDirectory",
"value":"\\filepath\$an"
}
}
但现在,foreach循环只是用最后一组哈希表覆盖$json变量。循环正在正确地迭代列表,因为我可以在其中放入convert-to-json|write-host cmdlet,但随后$an变量输出为"@(samaccountname="$an"(,而不仅仅是$an的实际值。
如果我的猜测是正确的,并且您希望得到一个Json作为问题中显示的Json(除了mclayton在评论中所说的input
属性值应该封装在[...]
中以作为数组(,那么应该这样做:
$json = @{
input = @(
foreach($an in $SamAccountName) {
[ordered]@{
key = "homeDirectory"
value = "\filepath$an"
}
}
)
}
$json | ConvertTo-Json -Depth 99