如何使用PHP获取Active Directory中的Departments列表?

时间:2015-10-14 14:45:58

标签: php symfony active-directory ldap

我需要使用ldap从Active Directory中获取仅部门值。 一种方法是使用此过滤器$filter = '(objectClass=user)';并将ldap_search()属性参数设置为array('department') 这个问题是我收到所有条目,其中一些是重复的。有人有什么建议吗?如果它有帮助,我正在使用Symfon2,我有ldap库

2 个答案:

答案 0 :(得分:1)

使用您的过滤器,您可以为具有特定属性(在您的案例中为部门)的用户设置LDAP-Entries。所以你的结果是一个用户节点列表。没有办法减少此用户节点列表以具有属性值的不同列表,因为这意味着从列表中删除用户。在您明确搜索所有用户时应删除哪些?

所以唯一的方法就是使用类似以下(未经测试的)代码片段来获取此类搜索结果中的列表:

$departments = [];
$entry = ldap_first_entry($connect, $result);
do {
    $attributes = ldap_get_attributes($connect, $entry);
    $departments[$attributes['department'][0]] = $attributes['department'][0];
} while ($entry = ldap_next_entry($connect, $entry));
print_R($departments);

答案 1 :(得分:0)

无法向AD请求重复数据删除的department值列表。您可以做的最接近的是这样的过滤器:(&(objectCategory=person)(objectClass=user)(department=*))然后对客户端列表进行重复数据删除。请注意,例如,这不会为联系人,组或计算机提供部门值。如果您也需要这些,则需要更新查询以包含您感兴趣的那些对象类型。