2017-05-17 187 views
0

我试图去适应一些码矩阵我在网上发现有以下几点:移调名单在PowerShell中

$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             : [email protected] 
Purchasing Read-Write          : False 
Developers Administrators         : False 
SharePoint 365 Administrators        : False 
Operations Read-Write          : False 

Accounts Administrators         : True 
Support Read-Write          : False 
Username             : [email protected] 
Purchasing Read-Write          : False 
Developers Administrators         : False 
SharePoint 365 Administrators        : True 
Operations Read-Write          : False 

#snip... 

不过我有两件事情,我不能工作了:

  1. 我怎样才能包括用户主体名称?我无法从ObjectGUID中查找,并且无法查找如何从我的用户数组中查找。

  2. 如何将此排序到打印矩阵中,其中我有一排用户(并且UPN是第一列),以及它们的关联组(具有True,如果它们是成员)沿着最佳。

这将构成如下:

    Accounts  Support  Sales 
[email protected]  1        1 
[email protected]      1 

感谢提前的帮助下,将发出帮助一些声望点数。

回答

3

你不想为此使用简单的哈希表。把UPN和组名在(有序)哈希表,并创建一个自定义对象:如果你想为空值,而不是False

 
Username   Accounts  Support  Sales 
--------   --------  -------  ----- 
[email protected]  True   False   True 
[email protected]  False   True  False 
... 

$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 
} 

输出看起来有点像这样用户不是将$false替换为空字符串('')的成员,并用您想要使用的任何标记(1,'x',...)替换$true

+0

输出看起来像什么? – Enigmativity

+0

非常感谢它确实返回一个用户名列表,一行一行地更新我的问题来解释,最后一步是将数组转换为矩阵。 – g18c

+1

@ g18c'... |格式Table'。 [相关](http://stackoverflow.com/a/40344479/1630171)。 –