从json读取数组并传递给Powershell中的变量

时间:2018-06-14 14:55:52

标签: json powershell

我尝试传入用户列表和角色,以便我可以使用PowerShell为用户分配角色。我想要一个json文件来包含这些信息并具有以下内容:

[
   {
      "name":"User1",
      "roles":[
         "System Administrator",
         "System User"
      ]
   },
   {
      "name":"User2",
      "roles":[
         "System User"
      ]
   }
]

我运行了以下Powershell:

$json = Get-Content -Raw -Path C:\temp\ExampleJsonArray.json | ConvertFrom-Json

这给了我:

name  roles                              
----  -----                              
User1 {System Administrator, System User}
User2 {System User}  

我的问题是 - 我如何将这些值传递给一个函数,该函数将循环遍历每个用户并遍历用户的每个角色,因此我可以运行cmdlet,允许我将每个角色分配给一个用户。时间?

add-RoleToUser $user $role

以上只是一个基本的例子。我期待更多的用户和角色,所以尽管json文件是管理和自动执行此任务的最简单方法。

2 个答案:

答案 0 :(得分:1)

使用foreach,您可以遍历每个name并在roles

的循环中循环
$json | foreach {
    $user = $_.name
    $_.roles | foreach {
        $role = $_
        Write-Output "User: $user"
        Write-Output "Role: $role"
        #Add-RoleToUser $user $role
    }
}
User: User1
Role: System Administrator
User: User1
Role: System User
User: User2
Role: System User

答案 1 :(得分:0)

拥有不同的迭代变量

ForEach ($User in $json){
    "User: {0}" -f $User.name

    ForEach ($Role in $User.roles){
        "      Role: {0}" -f $Role

    }
}

示例输出:

User: User1
      Role: System Administrator
      Role: System User
User: User2
      Role: System User

您还可以通过角色

从用户,角色和组构建新对象
$UserRoles = ForEach ($User in $json){
    ForEach ($Role in $User.roles){
        [PSCustomObject]@{
            User = $User.Name
            Role = $Role
        }
    }
}

$UserRoles | Group Role
> $UserRoles | Group Role

Count Name                      Group
----- ----                      -----
    1 System Administrator      {@{User=User1; Role=System Administrator}}
    2 System User               {@{User=User1; Role=System User}, @{User=User2; Role=System User}}