2017-06-07 47 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,我想我得到你在那里做的。我修改了逻辑来匹配我目前的脚本,它似乎在做我想做的事情,所以我会接受这个答案。 –

相关问题