使用PHP LDAP获取组成员的AD属性

时间:2014-10-01 14:14:59

标签: php active-directory ldap

我正在使用PHP查询Active Directory。我需要获得指定组的所有成员的一些属性(Office电话和电子邮件)。

我可以获得组中用户的完整CN,例如:

        $results = ldap_search($ds,$ldapbase, "cn=" . $group);
        $entries = ldap_get_entries($ds, $results);
        $members = $entries[0]['member'];

            for ($i=0; $i< count($members) -1; $i++) {

                $mem = $members[$i];

                if($mem != "") {

                    $groupMembers[] = $mem;
                }
            }

会给我一组这样的小组成员:

 CN=Testlastname1\, Testfirstname1,OU=Personnel,OU=All Staff,DC=domain,DC=domainsuffix              
 CN=Testlastname2\, Testfirstname2,OU=All Staff,DC=domain,DC=domainsuffix               
 etc...

我的问题是,如何获取这些结果并查询我需要的属性,即每个属性的办公电话和电子邮件地址?还是我完全错了?

我已经看到了一些接近这个和一些(有点拜占庭式)的例子,我无法开展工作。我玩过各种过滤器语法无济于事。必须有一种方法可以从成功的组查询中获取单个结果,检索结果描述的AD对象,并提取所需的属性,但我还没有找到它。

非常感谢任何帮助。

BTW - 在Windows 2008R2,IIS7.5上使用FastCGI的PHP版本5.5.7

1 个答案:

答案 0 :(得分:1)

以下应该以某种方式起作用:

foreach ($groupsmembers as $groupmember) {
    $result = ldap_search($ds,$groupmember, '*', 'officephone,mail');
    $entries = ldap_get_entries($ds, $results);
    $users[$groupmember]['officephone'] = $entries[0]['officephone'][0];
    $users[$groupmember]['mail'] = $entries[0]['mail'][0];
}

主要的是,您使用检索到的DN(这是CN=Testlastname1\, Testfirstname1,OU=Personnel,OU=All Staff,DC=domai....的东西)作为搜索库,然后从中检索电子邮件和officephone属性。

在(Linux)-Commandline上看起来像这样:

ldapsearch -h ldap-server -b "CN=Testlastname1, Testfirstname1,OU=Personnel,OU=All Staff,DC=domain,DC=domainsuffix" * mail,officephone

希望有所帮助