组成员的 LDAP 过滤器

Jak*_*e Y 7 powershell ldap

我正在尝试运行 LDAP 过滤器以返回组内的所有用户。非常简单,并且有数百个 Stack Overflow 问题已经提供了示例查询。然而,我使用的是基本的,在 Powershell 中运行时不会返回任何内容。

我尝试过的

Get-ADUser -LDAPFilter "(&(objectclass=user)(objectcategory=person)(memberOf=CN=MyGroup,OU=Users,DC=MyDomain,DC=com))"
Run Code Online (Sandbox Code Playgroud)

我还尝试过“CN=Users”而不是“OU=Users”

其中“MyGroup”位于 OU 中:

“我的域” (林) >“用户” (OU) >“我的组” (CN)

你知道我做错了什么吗?为什么“MyGroup”的 100-200 名成员都没有被返回?

Rya*_*ger 6

我要做的第一件事是仔细检查您尝试匹配的组的 DN 是否确实正确。我通常会做这样的事情:

(Get-ADGroup MyGroup).distinguishedName

# optionally, save it to a variable
$groupDN = (Get-ADGroup MyGroup).distinguishedName
Run Code Online (Sandbox Code Playgroud)

Get-ADUser会将您的结果限制为用户对象,因此您可以省略 LDAP 过滤器的 objectclass/objectcategory 部分,而只包含 memberOf 部分。您可以使用我们之前设置的 DN 变量,如下所示:

Get-ADUser -LDAPFilter "(memberOf=$groupDN)"
Run Code Online (Sandbox Code Playgroud)

关于此特定查询需要注意的重要一点是,它只会返回属于该组的直接成员的用户。它不会返回嵌套成员。因此,如果该组的一个成员是另一个组,则无需额外的努力,第二组的成员就不会显示在结果中。您可以通过像这样调整过滤器来获取这些嵌套成员:

Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$groupDN)"
Run Code Online (Sandbox Code Playgroud)

中间那个疯狂的点数字是一个名为LDAP_MATCHING_RULE_IN_CHAIN的 OID 。来自文档:

LDAP_MATCHING_RULE_IN_CHAIN 是一个匹配规则 OID,旨在提供一种查找对象祖先的方法。许多使用 AD 和 AD LDS 的应用程序通常使用按父子关系排序的分层数据。以前,应用程序执行传递组扩展来确定组成员资格,这会占用过多的网络带宽;如果链接遍历到末端,应用程序需要进行多次往返才能确定对象是否落在“链中”。

您的查询可能不返回结果的另一个原因是,如果您运行查询的用户由于某种原因没有对部分/所有用户的读取访问权限。