簡體   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