2014-10-01 146 views
0

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

我可以得到该组中的用户的完整的中枢神经系统,因此,例如:

 $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 - PHP 5.5.7版本在Windows上使用2008R2的FastCGI,IIS7.5

回答

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....)作为搜索基地,然后从中检索电子邮件和办公电话属性。

在(Linux)的-CommandLine,将是这样的:

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

希望帮助

+0

我会在几个小时内一展身手,让你知道。 – 2014-10-02 18:09:29

+0

很好的建议。我最终做的是使用ldap_explode_dn解析单个结果,取第一个值[0]并搜索它 - $ filter =“(&(CN = $ parsedresult [0])))”。这工作,是或多或少你的建议。 – 2014-10-03 00:11:27

+0

更有效的方法是搜索属于某个组的用户,而不是搜索某个组,获取其“成员”属性,然后对所有成员进行单独搜索。以下搜索过滤器应该做的伎俩: '(&(objectCategory = Person)(memberOf = GROUP_DN_HERE))' – 2014-10-04 23:08:02