[英]PowerShell: How can I output a hashtable as json and store it in a variable using a foreach loop?
我正在尝试编写一个与 Rest API 交互的脚本,以在活动目录中进行更改(我知道这没有多大意义,但这是我们公司做事的方式)。 更改是修改属于特定安全组的用户列表的 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 交互所需的格式),并将其保存为以下格式(注意,“输入”“键”和“值”键实际上都是 API用途,而不仅仅是替换):
{
"input":{
"key":"homeDirectory",
"value":"\\\\filepath\\$an"
},
{
"key":"homeDirectory",
"value":"\\\\filepath\\$an"
}
}
但是现在,foreach 循环只是用最后一组哈希表覆盖了 $json 变量。 循环正确地遍历列表,因为我可以在其中放入一个 convertto-json|write-host cmdlet,但是 $an 变量输出为 "@(samaccountname="$an") 而不是实际的 $an是。
如果我的猜测是正确的,并且您想要一个结果 Json 作为您的问题中所示的结果(除了如mclayton在评论中所说的那样, input
属性值应该包装在[...]
中作为一个数组)然后这个应该这样做:
$json = @{
input = @(
foreach($an in $SamAccountName) {
[ordered]@{
key = "homeDirectory"
value = "\\filepath\$an"
}
}
)
}
$json | ConvertTo-Json -Depth 99
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.