gpt4 book ai didi

powershell - 如何根据组扩展属性获取用户所属的所有组

转载 作者:行者123 更新时间:2023-12-03 00:55:59 27 4
gpt4 key购买 nike

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

extensionattribute12=security


(例如)。
我使用类似:
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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com