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