PowerShell:如何将哈希表输出为json,并使用foreach循环将其存储在变量中



我正在尝试编写一个与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

最新更新