If an OU contains 3000 users, how to use DirectorySearcher to find all of them?

前端 未结 2 1353
情书的邮戳
情书的邮戳 2020-12-31 19:16

I use this code:

DirectoryEntry objEntry;
DirectorySearcher objSearchEntry;
SearchResultCollection objSearchResult;
string strFilter = \"(&(objectCategor         


        
2条回答
  •  旧巷少年郎
    2020-12-31 19:43

    If you're on .NET 3.5 or newer, you should check out the PrincipalSearcher and a "query-by-example" principal to do your searching:

    // create your domain context
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=SomeOU,DC=YourCompany,DC=com");
    
    // define a "query-by-example" principal - here, we search for a UserPrincipal 
    // and with the first name (GivenName) of "Bruce"
    UserPrincipal qbeUser = new UserPrincipal(ctx);
    qbeUser.GivenName = "Bruce";
    
    // create your principal searcher passing in the QBE principal    
    PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
    
    // set the PageSize on the underlying DirectorySearcher to get all 3000 entries
    ((DirectorySearcher)srch.GetUnderlyingSearcher()).PageSize = 500;
    
    // find all matches
    foreach(var found in srch.FindAll())
    {
        // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
    }
    

    If you haven't already - absolutely read the MSDN article Managing Directory Security Principals in the .NET Framework 3.5 which shows nicely how to make the best use of the new features in System.DirectoryServices.AccountManagement

    Update:

    Of course, depending on your need, you might want to specify other properties on that "query-by-example" user principal you create:

    • Surname (or last name)
    • DisplayName (typically: first name + space + last name)
    • SAM Account Name - your Windows/AD account name
    • User Principal Name - your "username@yourcompany.com" style name

    You can specify any of the properties on the UserPrincipal and use those as "query-by-example" for your PrincipalSearcher.

    Update #2: If you want to search just inside a given OU, you can define that OU in the constructor of the PrincipalContext.

提交回复
热议问题