2017-05-17 189 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)。 –