将列表转置到powershell中的矩阵

将列表转置到powershell中的矩阵,powershell,powershell-3.0,Powershell,Powershell 3.0,我正在尝试修改我在网上找到的一些代码,并具有以下内容: $groups = Get-ADGroup -Filter {GroupCategory -eq ‘security’} -SearchBase ‘OU=Groups,DC=corp,DC=test,DC=local’ $users = Get-ADUser -Filter * -SearchBase “dc=corp,dc=test,dc=local” $addADGroupMembers = @{} foreach($group i

我正在尝试修改我在网上找到的一些代码,并具有以下内容:

$groups = Get-ADGroup -Filter {GroupCategory -eq ‘security’} -SearchBase ‘OU=Groups,DC=corp,DC=test,DC=local’
$users = Get-ADUser -Filter * -SearchBase “dc=corp,dc=test,dc=local”

$addADGroupMembers = @{}

foreach($group in $groups) {
    $addADGroupMembers.Add($group.Name, $group.ObjectGUID)
}

$htUsers = @{}
$htProps = @{}
$addADGroupMembers.Keys | foreach {$htProps.$_=$null}
foreach ($group in $addADGroupMembers.GetEnumerator()){
    foreach ($user in $group.Value){
        if (!$htUsers.ContainsKey($user)){
            $htProps.UserID = $user
            $htUsers.$user = $htProps.Clone()
        }
        ($htUsers.$user).$($group.Name) = 1
    }
}
这给了我一个用户列表,每个用户都有一个列表元素,如下所示:

Accounts Administrators                                   : False
Support Read-Write                                        : False
Username                                                  : user1@test.local
Purchasing Read-Write                                     : False
Developers Administrators                                 : False
SharePoint 365 Administrators                             : False
Operations Read-Write                                     : False

Accounts Administrators                                   : True
Support Read-Write                                        : False
Username                                                  : joe@test.local
Purchasing Read-Write                                     : False
Developers Administrators                                 : False
SharePoint 365 Administrators                             : True
Operations Read-Write                                     : False

#snip...
但我有两件事不能解决:

  • 如何获取包含的用户主体名称?我无法从ObjectGUID中查找此项,也无法确定如何从我的用户数组中查找

  • 如何将其排序到打印的矩阵中,在该矩阵中,我有一行行的用户(UPN是第一列),以及他们的相关组(如果他们是成员,则为True in)

  • 这将形成以下形式:

                        Accounts        Support        Sales
    User1@domain.com      1                             1
    User2@domain.com                       1
    

    提前感谢您的帮助,我们将为您的帮助发布一些信誉点。

    您不想为此使用普通哈希表。将UPN和组名放入(有序)哈希表中,并从中创建自定义对象:

    $groups = Get-ADGroup -Filter "GroupCategory -eq 'security'" -SearchBase 'OU=Groups,DC=corp,DC=test,DC=local'
    
    Get-ADUser -Filter * -SearchBase "dc=corp,dc=test,dc=local" -Properties MemberOf | ForEach-Object {
      $props = [ordered]@{ 'Username' = $_.UserPrincipalName }
      $groups | ForEach-Object {
        $props[$_.Name] = $false
      }
    
      $_.MemberOf | Get-ADGroup | Select-Object -Expand Name | ForEach-Object {
        if ($props.ContainsKey($_)) {
          $props[$_] = $true
        }
      }
    
      New-Object -Type PSObject -Property $props
    }
    
    输出看起来有点像这样:

    Username Accounts Support Sales -------- -------- ------- ----- User1@domain.com True False True User2@domain.com False True False ... 用户名帐户支持销售 -------- -------- ------- ----- User1@domain.com真假假真 User2@domain.com假真假 ...
    如果您希望为组使用空值而不是
    False
    ,则用户不是将
    $False
    替换为空字符串(
    '
    )的成员,并将
    $true
    替换为您想要使用的任何标记(
    1
    'x'
    ,…)。

    您不想为此使用普通哈希表。将UPN和组名放入(有序)哈希表中,并从中创建自定义对象:

    $groups = Get-ADGroup -Filter "GroupCategory -eq 'security'" -SearchBase 'OU=Groups,DC=corp,DC=test,DC=local'
    
    Get-ADUser -Filter * -SearchBase "dc=corp,dc=test,dc=local" -Properties MemberOf | ForEach-Object {
      $props = [ordered]@{ 'Username' = $_.UserPrincipalName }
      $groups | ForEach-Object {
        $props[$_.Name] = $false
      }
    
      $_.MemberOf | Get-ADGroup | Select-Object -Expand Name | ForEach-Object {
        if ($props.ContainsKey($_)) {
          $props[$_] = $true
        }
      }
    
      New-Object -Type PSObject -Property $props
    }
    
    输出看起来有点像这样:

    Username Accounts Support Sales -------- -------- ------- ----- User1@domain.com True False True User2@domain.com False True False ... 用户名帐户支持销售 -------- -------- ------- ----- User1@domain.com真假假真 User2@domain.com假真假 ...
    如果您希望组的值为空而不是
    False
    ,则用户不是组的成员,请使用空字符串(
    '
    )替换
    $False
    ),并使用您想要使用的任何标记(
    1
    'x'
    ,…)替换
    $true
    ).

    输出结果会是什么样子?非常感谢它确实返回了一个用户名列表,逐行更新我的问题以解释,最后一步是将数组转换为矩阵。@g18c
    。|格式表
    。输出结果会是什么样子?非常感谢它确实返回了一个用户名列表,逐行更新我的问题以解释,最后一步是将数组转换为矩阵。@g18c
    。|格式表