2017-06-07 49 views
0

不知道這是否可能,但我試圖比較ADgroup對象和PSCustomObject對象的屬性。我們正在進行用戶審計,這需要根據我們的活動AD用戶帳戶以及AD組成員身份驗證活動員工的列表。這裏是什麼,我至今一個基本的細分:在PowerShell中比較不同對象的最佳方法

(我們定義兩個獨立的搜索路徑,因爲我們集團在不同的OU)

  • $ mainGroups = GET-廣告組的篩選器* -SearchBase「 OU_here」
  • $亞組= GET-廣告組過濾器* -SearchBase '從人力資源系統用戶名Different_OU_here'

列表

  • $ sourceUsers =獲取內容-path 'C:\ TEMP \ users.txt' 從公元

    • $ ADUserName = GET-ADUser便有型濾波器* -SearchBase「用戶名

    名單User_OU '--searchscope子樹|選擇-ExpandProperty Sam帳戶

空數組來存儲自定義對象/屬性

  • $ userObjEQ = @()

比較HR到AD

  • $ compareResults = compare-object -referenceobject $ sourceUsers -differenceObject $ ADUserName

  • 所有匹配的用戶查找組成員,創建自定義對象等

    foreach ($result in $compareResults) { 
        if ($result.SideIndicator -eq '==') { 
         $groupMem = get-adprincipalgroupmembership -identity $result.InputObject 
        } 
        $userObjEQ += [pscustomobject] @{ 
        'UserName' = $result.InputObject 
        'Groups' = $groupMem.Name 
        } 
    } 
    

從這以後,我想每個組從$ mainGroups每個匹配的用戶組名稱比較這點看看是否有匹配。如果沒有,則將其與$ subGroups組名稱進行比較。如果匹配無效,如果不匹配,則輸出用戶名和任何不匹配的組名。只是不確定如何最好地比較這些對象。任何提示將不勝感激。

+0

所以你有一個用戶列表。 你想獲得每個用戶所在的ADGroup? – ArcSet

+0

@ArcSet不抱歉,我有我們人力資源部門的活躍用戶列表。我已將該列表中的用戶名存儲到sourceUsers變量中。然後我從活躍的AD用戶手中獲取用戶名列表。我比較這兩個列表並僅提取匹配的用戶名。 我從那裏做的是抓取每個匹配用戶所屬的所有組的列表。 我現在想要做的是找出如何比較每個匹配用戶的組與$ mainGroups和$ subGroups OU中找到的組。對不起,如果我沒有解釋得好。 –

回答

1

如果您的組是數組,然後使用-contains操作 - 如果他們沒有,讓他們陣:

foreach ($u in $users) { 
    foreach ($groupdn in $u.memberof) { 
     if ($mainGroups -contains $ug -or $subGroups -contains $ug) { 
     ## do something when the users' group exists in the checked sub-groups 
     } 
    } 
} 

...這假設$ maingroups陣列組的DN的數組...

+0

對不起,你的代碼中的$ ug是多少? –

+0

nvm,我想我得到你在那裏做的。我修改了邏輯來匹配我目前的腳本,它似乎在做我想做的事情,所以我會接受這個答案。 –

相關問題