2014-10-01 142 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