繁体   English   中英

PowerShell:我如何将 output 哈希表作为 json 并使用 foreach 循环将其存储在变量中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM