在powershell

时间:2017-06-07 15:56:42

标签: powershell

不确定这是否可行,但我试图比较ADgroup对象和PSCustomObject对象的属性。我们正处于用户审核阶段,需要根据我们的有效AD用户帐户及其AD群组成员身份验证活动员工列表。这是我到目前为止的基本细分:

(我们正在定义两个单独的搜索路径,因为我们在不同的OU中有组)

  • $ mainGroups = get-adgroup -filter * -searchbase' OU_here'
  • $ subGroups = get-adgroup filter * -searchbase' Different_OU_here'

人力资源系统的用户名列表

  • $ sourceUsers = get-content -path' c:\ temp \ users.txt'

AD的用户名列表

  • $ ADUserName = get-aduser -filter * -searchbase' User_OU' -searchscope子树| select -expandproperty SamAccountName

用于存储自定义对象/属性的空数组

  • $ 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组名称进行比较。如果匹配不执行任何操作,如果存在不匹配,请输出用户名以及任何不匹配的组名。只是不确定如何最好地比较这些对象。任何提示将不胜感激。

1 个答案:

答案 0 :(得分: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的数组......