Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }