【问题标题】:best way to compare different objects in powershell在PowerShell中比较不同对象的最佳方法
【发布时间】:2017-11-09 02:20:40
【问题描述】:

不确定这是否可能,但我正在尝试比较 ADgroup 对象和 PSCustomObject 对象的属性。我们正在进行用户审核,需要根据我们的活动 AD 用户帐户及其 AD 组成员身份验证活动员工列表。以下是我目前所拥有的基本分类:

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

  • $mainGroups = get-adgroup -filter * -searchbase 'OU_here'
  • $subGroups = 获取广告组过滤器 * -searchbase 'Different_OU_here'

人力资源系统用户名列表

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

来自 AD 的用户名列表

  • $ADUserName = get-aduser -filter * -searchbase 'User_OU' -searchscope 子树 |选择 -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 组名称进行比较。如果匹配则什么都不做,如果不匹配,则输出用户名以及任何不匹配的组名。只是不确定如何最好地比较这些对象。任何提示将不胜感激。

【问题讨论】:

  • 所以你有一个用户列表。您想获取每个用户所在的 ADGroups 吗?
  • @ArcSet 不,抱歉,我有一份来自人力资源部门的活跃用户列表。我已将该列表中的用户名存储到 sourceUsers 变量中。然后我从活跃的 AD 用户那里获取了一个用户名列表。我比较两个列表并仅提取匹配的用户名。我从那里做的是抓取每个匹配用户所属的所有组的列表。我现在要做的是弄清楚如何将每个匹配的用户组与 $mainGroups 和 $subGroups OU 中找到的组进行比较。对不起,如果我解释得不好。

标签: powershell


【解决方案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 数组...

【讨论】:

  • nvm,我想我明白你在做什么。我修改了逻辑以匹配我当前的脚本,它似乎正在做我想要的,所以我会接受这个作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2012-02-29
  • 2020-10-23
  • 2015-11-14
  • 2022-01-01
相关资源
最近更新 更多