I have to populate my autocomplete PeopleEditor-like control based on brililant ASPTokenInput with all people from my AD domain. Reflecting PeopleEditor shows a real mess in their Active Directory search engine and all potentially helpful classes are internal.

My test method works fine, but I need to get ALL users from AD(not sharepoint site ones) to populate my list: How it looks

public string GetUsers(string filter)
        var spWeb = SPContext.Current.Web;
        SPUserCollection allusers = spWeb.AllUsers;
        List<SPUser> users = allusers.Cast<SPUser>().ToList();
        var query = from spUser in users.Select(usr => new {id = usr.ID, name = usr.Name})
                        .Where(p => p.name.IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    select new {id = spUser.id.ToString(), spUser.name};

        return new JavaScriptSerializer().Serialize(query);

How can I query active directory like this? Is it possible to retrieve all AD connection settings from sharepoint itself? I need just id and user name to fill my dropdownlist Converting this to SPUserCollection is another big deal.

It would be great to use some built-in SP methods like this:

 public static SPPrincipalInfo ResolveWindowsPrincipal(SPWebApplication webApp,      string input, SPPrincipalType scopes, bool inputIsEmailOnly)
    return ResolveWindowsPrincipal(null, webApp, input, scopes, inputIsEmailOnly);
  • I don't think you are getting all users from AD with this code, I think you only get the users from the sharepoint site – Ruben Herman Oct 25 '11 at 8:10
  • I know, I know. This method is test, and I really need to implement a real search in AD like PeopleEditor does. – Bassist Oct 25 '11 at 8:18

Actually, that was easy one. One thing I need to implement with AD search is SharePoint Group search(if specified). So, here is a solution if someone needs:

/// <summary>
/// Provides searching for AD or SharePoint group if specified in field setting
/// </summary>
public static class ActiveDirectorySearchProvider
    public static IList<SPPrincipalInfo> Search(string filter, string selectionGroup, string principalType)
        var site = SPContext.Current.Site.WebApplication;
        bool reachmaxcount;
        var scope = SPUtils.GetSpPrincipalType(principalType);

        if (!String.IsNullOrEmpty(selectionGroup)) //search for users in SPGroup if present
            var rawSPGroupList = SPUtility.GetPrincipalsInGroup(SPContext.Current.Web, selectionGroup, 100,
                                                           out reachmaxcount).ToList();

            string lowerFilter = filter.ToLowerInvariant();

            var filteredGroupList =
                    pInfo =>
                    pInfo.LoginName.Substring(pInfo.LoginName.IndexOf('\\') + 1).StartsWith(lowerFilter) ||
                    pInfo.DisplayName.ToLowerInvariant().StartsWith(lowerFilter) ||
                    pInfo.DisplayName.ToLowerInvariant().Substring(pInfo.DisplayName.IndexOf(' ') + 1).StartsWith(

            return filteredGroupList;

       return SPUtility.SearchWindowsPrincipals(site, filter, scope, 100, out reachmaxcount); //Search in AD instead

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.