我正在尝试获取域用户所属的所有组,但是仅过滤具有给定扩展名属性的组。
我将所有域组的扩展名属性设置为,以更好地过滤某些查询(即基础架构-安全-电子教学)。我的查询应仅获取具有以下内容的用户组

(例如)。
我使用类似:

get-aduser -filter  -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof  -join ";"  } }
我得到了所有的用户组。如何按组扩展属性过滤?

最佳答案

您可以使用逆关系(组对象上的member)查询用户所属的所有组,每个用户只需查询1个。这里使用LDAP过滤器:

$groupLabel = "Security"

Get-ADUser -Filter * |ForEach-Object {
  $groups = Get-ADGroup -LDAPFilter "(&(extensionattribute12=$groupLabel)(member=$($_.DistinguishedName)))"

  [pscustomobject]@{
    User = $_.SamAccountName
    GroupMembership = $groups.DistinguishedName -join ';'
  }
}

如果必须处理大量用户或组成员身份,则可能会发现检索所有满足extensionAttribute12标准的所有组并使用该列表过滤用户上的memberOf属性的速度更快:
$groupLabel = "Security"
# Create a hash set and populate it with the distinguished
# names of all the groups we're looking for
$groupDNs = [System.Collections.Generic.HashSet[string]]::new(@(
  Get-ADGroup -Filter "extensionAttribute12 -eq '$groupLabel'" |Select -Expand DistinguishedName
))

Get-ADUser -Filter * -Properties memberOf |ForEach-Object {
  # Retrieve memberOf values and filter against the hash set
  $groups = $_.memberOf |Where-Object { $groupDNs.Contains($_) }

  [pscustomobject]@{
    User = $_.SamAccountName
    GroupMembership = $groups -join ';'
  }
}

关于powershell - 如何根据组扩展属性获取用户所属的所有组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63530485/

10-17 02:32