2015-01-07 108 views
2

我在Active Directory中爲不同的用戶組設置了不同的OU,我想要使用C#獲取特定OU的所有用戶。在特定OU Active Directory中搜索用戶

目前我有這個過濾器,但它返回的所有用戶的所有OU

(&(objectClass=User)(objectCategory=Person)) 

請幫我在使用LDAP

感謝

回答

4

您可以使用PrincipalSearcher找出特定用戶的用戶和一個「按實例查詢」的委託人來做您的搜索:

// LDAP string to define your OU 
string ou = "OU=Sales,DC=YourCompany,DC=com"; 

// set up a "PrincipalContext" for that OU 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "Yourcompany.com", ou)) 
{ 
    // define the "query-by-example" user (or group, or computer) for your search 
    UserPrincipal qbeUser = new UserPrincipal(ctx); 

    // set whatever attributes you want to limit your search for, e.g. Name, etc. 
    qbeUser.Surname = "Smith"; 

    // define a searcher for that context and that query-by-example 
    using (PrincipalSearcher searcher = new PrincipalSearcher(qbeUser)) 
    { 
     foreach (Principal p in searcher.FindAll()) 
     { 
      // Convert the "generic" Principal to a UserPrincipal 
      UserPrincipal user = p as UserPrincipal; 

      if (user != null) 
      { 
       // do something with your found user.... 
      } 
     } 
    } 

如果你還沒有 - 絕對閱讀MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,它很好地展示瞭如何充分利用System.DirectoryServices.AccountManagement中的新功能。或者查看MSDN documentation on the System.DirectoryServices.AccountManagement命名空間。

當然,這取決於你的需要,你可能想在你創建一個「查詢通過例如」用戶主體指定其他屬性:

  • DisplayName(通常爲:第一名稱+空格+姓氏)
  • SAM Account Name - 你的Windows/AD帳戶名
  • User Principal Name - 你的 「[email protected]」 樣式名

可以SPE將UserPrincipal上的任何屬性都作爲屬性,並將它們用作您的PrincipalSearcher的「查詢範例」。

+0

謝謝您的答覆。 但我必須使用ldap來做到這一點 –

+0

@MuhammadTaqi:我的回覆***是使用LDAP的***! –

1

一種選擇是當你創建DirectoryEntry對象剛纔設置的組織單位(OU):

using (var entry = new DirectoryEntry($"LDAP://OU={unit},OU=Accounts,DC={domain},DC=local")) 
{ 
    // Setup your search within the directory 
    var search = new DirectorySearcher(entry) 
    { 
     Filter = "(&(objectCategory=person)(objectClass=user)(memberOf=*))" 
    }; 

    // Set the properties to be returned 
    search.PropertiesToLoad.Add("SamAccountName"); 

    // Get the results 
    var results = search.FindAll(); 

    // TODO Process the results as needed... 
} 
相關問題