我正在try 编写一个与REST API交互的脚本来更改活动目录(我知道这没有多大意义,但这是我们公司的做法).更改是为了修改属于特定安全组的用户列表的home目录属性.用户并不都在同一个域中,但在同一个林中并且在全局编录中注册.

到目前为止,我的 idea 是这样的:

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变量输出为"@(samcount tname="$an"),而不是$an实际是什么.

推荐答案

如果我的猜测是正确的,并且您希望得到一个与问题中所示的Json相同的Json(例外情况是,正如注释中所述,input属性值应该包装在[...]中以成为一个数组),那么应该这样做:

$json = @{
    input = @(
        foreach($an in $SamAccountName) {
            [ordered]@{
                key   = "homeDirectory"
                value = "\\filepath\$an"
            }
        }
    )
}

$json | ConvertTo-Json -Depth 99

Json相关问答推荐

合并二维数组的Jolt表达式

如何使用表键名称GROUP_BY

Terraform迭代JSON文件以获取键值对

如何使用 JOLT 使用输入数组中的值和层次 struct 中的其他字段创建数组

使用 jq 如何更改键的值?

(已回答)JSON 读取函数返回未定义而不是预期值 - Typescript

GitHub Pages无法正确显示我的项目

将JSON行转换为TSV格式, for each 数组项生成单独的行

jq :遍历 json 并在键存在时检索集合

添加到数组时出错:找不到Add的重载和参数计数:1

JOLT 在 struct 体中间添加一个 JSON 字段

在Flutter 中将 map 的 Json 转换为 list

从 HttpResponse 获取 json

如何使用 jq 将 JSON 对象流转换为数组

Jackson Scala 模块的小例子?

Spring Security 和 JSON 身份验证

JSON Schema:验证数字或空值

Django:TypeError:[] 不是 JSON 可序列化的为什么?

如何从 JSON 响应中提取单个值?

从调试器获取 IntelliJ Idea 中的 JSON 对象