public static List <XenDesktopInventoryItem> GetActiveDirectoryUsers() { var ldapPath = DT2.Properties.Settings.Default.LdapPath; var users = new List <XenDesktopInventoryItem>(); try { // Search for all users in domain // see http://msdn.microsoft.com/en-us/library/ms180885(v=vs.80).aspx // //this is the connection to your active directory DirectoryEntry entry = new DirectoryEntry(ldapPath); // Create a DirectorySearcher object. DirectorySearcher mySearcher = new DirectorySearcher(entry); // Create a SearchResultCollection object to hold a collection of SearchResults // returned by the FindAll method. SearchResultCollection searchResult = mySearcher.FindAll(); foreach (SearchResult item in searchResult) { if (item.Properties["samaccountname"].Count == 0) { continue; } int samaccounttype = (int)item.Properties["samaccounttype"][0]; if (samaccounttype != 0x30000000 && samaccounttype != 0x10000000) { continue; } var acctName = (string)item.Properties["samaccountname"][0]; if (UsersSkipList.Contains(acctName)) { continue; } var user = new XenDesktopInventoryItem { Id = acctName, Name = acctName }; users.Add(user); } users.Sort(new Comparison <XenDesktopInventoryItem>(XenDesktopInventoryItem.Compare)); } catch (System.Exception ex) { var errmsg = "Problem searching for users in " + ldapPath + " Details: " + ex.Message; logger.Error(errmsg); } return(users); }
public static List <XenDesktopInventoryItem> GetActiveDirectoryUsers(string query) { var users = new List <XenDesktopInventoryItem>(); var grps = new List <XenDesktopInventoryItem>(); var usersFinal = new List <XenDesktopInventoryItem>(); LoginViewModel clientId = LoginViewModel.JsonDeserialize(((FormsIdentity)HttpContext.Current.User.Identity).Ticket); logger.Debug("Find users and groups in domain of " + clientId.UserName); string searchDomain = clientId.DomainName; try { PrincipalContext adController = new PrincipalContext(ContextType.Domain, searchDomain, clientId.UserName, clientId.Password); UserPrincipal user = new UserPrincipal(adController); user.SamAccountName = query; PrincipalSearcher usrSrch = new PrincipalSearcher(user); PrincipalSearchResult <Principal> userSearchResult = usrSrch.FindAll(); logger.Debug("Search for users netted " + userSearchResult.Count() + " results."); GroupPrincipal grp = new GroupPrincipal(adController); grp.SamAccountName = query; PrincipalSearcher grpSrch = new PrincipalSearcher(grp); PrincipalSearchResult <Principal> grpSearchResult = grpSrch.FindAll(); logger.Debug("Search for groups netted " + grpSearchResult.Count() + " results."); int grpCount = 20; foreach (var currGrp in grpSearchResult) { if (UsersSkipList.Contains(currGrp.SamAccountName)) { continue; } var userRsrc = new XenDesktopInventoryItem { Id = searchDomain + "\\" + currGrp.SamAccountName, Name = searchDomain + "\\" + currGrp.SamAccountName + "(group)" }; grps.Add(userRsrc); grpCount--; if (grpCount < 0) { break; } } grps.Sort(new Comparison <XenDesktopInventoryItem>(XenDesktopInventoryItem.Compare)); int userCount = 100; foreach (var currUser in userSearchResult) { if (UsersSkipList.Contains(currUser.SamAccountName)) { continue; } var userRsrc = new XenDesktopInventoryItem { Id = searchDomain + "\\" + currUser.SamAccountName, Name = searchDomain + "\\" + currUser.SamAccountName }; users.Add(userRsrc); userCount--; if (userCount < 0) { break; } } users.Sort(new Comparison <XenDesktopInventoryItem>(XenDesktopInventoryItem.Compare)); usersFinal = grps.Concat(users).ToList(); } catch (System.Exception ex) { var errmsg = "Problem searching for users in " + searchDomain + " Details: " + ex.Message; logger.Error(errmsg); logger.Error(ex); } return(usersFinal); }