2012-03-22 32 views
0

由於AD級別的一些更改,我必須在我的應用程序中更改AD中的查找。現在必須在2個不同的OU中執行搜索,而不是1個。2個組織單元中的LDAP搜索

在此刻,如果第一個搜索沒有返回任何內容,則運行第二個搜索。

是否可以將2條路徑合併爲1,因此只能搜索一次?

Thx。

using (var de = new DirectoryEntry()) 
{ 
    de.Path = "LDAP://OU=ou1,OU=Users,OU=BE,DC=dc,DC=sys"; 
    de.AuthenticationType = AuthenticationTypes.Secure; 

    var deSearch = new DirectorySearcher 
    { 
     SearchRoot = de, 
     Filter = "(&(objectClass=user) (sAMAccountName=" + userId + "))" 
    }; 

    var result = deSearch.FindOne(); 

    if (result == null) 
    { 
     //User not found in ou1 
     de.Path = "LDAP://OU=ou2,OU=Users,OU=BE,DC=dc,DC=sys"; 
     de.AuthenticationType = AuthenticationTypes.Secure; 

     deSearch = new DirectorySearcher 
     { 
      SearchRoot = de, 
      Filter = "(&(objectClass=user) (sAMAccountName=" + userId + "))" 
     }; 

     result = deSearch.FindOne(); 

     if (result==null) return null; 
    } 

    using (var deUser = new DirectoryEntry(result.Path)) 
    { 
     //Do something 
    } 
} 
+0

不,你不能一次搜索2個OU--你必須分別進行兩次搜索,併合並結果。 – 2012-03-22 10:46:41

+0

@marc_s謝謝。我會保持它的方式。如果您將此作爲答案發布,則Q可以關閉。 – Koen 2012-03-22 11:56:50

回答

0

變化基礎對象OU=Users,OU=BE,DC=dc,DC=sys,使用相同的過濾器,使用subone(取決於其中數據被組織單位下的位置)一個範圍。有關搜索目錄的更多信息,請參閱「LDAP: Using ldapsearch」和「LDAP: Programming Practices」。

+0

我已經把它用在了我的Q中,但我肯定會看看這個。謝謝。 – Koen 2012-03-22 18:50:45

+0

只做了一個快速測試。像你提到的那樣改變路徑並保持過濾器的狀態。它給了我和以前一樣的結果,所以它工作。但是有沒有辦法來測試結果是否是上述OU的一部分?我能找到的最好的屬性是'distinguishedName - CN = John Doe,OU = ou1,OU = Users,OU = BE,DC = ds,DC = sys'。 – Koen 2012-03-23 09:39:26