public DataSet GetUsersForGroup(string GroupName)
        {
            //if (GroupName.IndexOf(';') > 0)
            //{
            //    return GetUsersForGroup(GroupName.Split(new char[] { ';' }));
            //}
            if (GroupName == string.Empty) return null;
            try
            {
                DirectoryEntry dir = GetDirectoryObject();
                dir.RefreshCache();
                DirectorySearcher ds = new DirectorySearcher(dir);
                ds.Filter = "(&(objectClass=group)(cn=" + GroupName + "))";
                ds.PropertiesToLoad.Add("memberof");
                SearchResult results = ds.FindOne();
                DataSet dsUser = new DataSet();
                DataTable tbUser = dsUser.Tables.Add("Users");
                tbUser.Columns.Add("GroupName");
                tbUser.Columns.Add("samaccountname");
                tbUser.Columns.Add("UserName");
                tbUser.Columns.Add("DisplayName");
                tbUser.Columns.Add("EMailAddress");
                tbUser.Columns.Add("primaryGroupID");
                if (results != null)
                {
                    DirectoryEntry deGroup = new DirectoryEntry(results.Path, _ADUser, _ADPwd, AuthenticationTypes.Secure);
                    System.DirectoryServices.PropertyCollection pcoll = deGroup.Properties;                  
                    int n = pcoll["member"].Count;
                    for (int i = 0; i < n; i++)
                    {
                        DirectoryEntry deUser = new DirectoryEntry(_ADPath + "/" + pcoll["member"][i].ToString(), _ADUser, _ADPwd, AuthenticationTypes.Secure);
                        try
                        {
                            DataRow rwUser = tbUser.NewRow();
                            rwUser["GroupName"] = GroupName;
                            rwUser["samaccountname"] = GetProperty(deUser, "samaccountname");
                            rwUser["UserName"] = GetProperty(deUser, "cn");
                            rwUser["DisplayName"] = GetProperty(deUser, "givenName") + " " + GetProperty(deUser, "sn");
                            rwUser["EMailAddress"] = GetProperty(deUser, "mail");
                            rwUser["primaryGroupID"] = GetProperty(deUser, "primaryGroupID");
                            tbUser.Rows.Add(rwUser);
                            deUser.Close();
                        }
                        catch (System.Exception ex)
                        {
                            throw ex;
                        }
                    }
                    dir.Close();
                    deGroup.Close();
                }
                if (dsUser.Tables[0].Rows.Count <= 0)
                {
                    DataRow rwDefaultUser = tbUser.NewRow();
                    rwDefaultUser["GroupName"] = GroupName;
                    rwDefaultUser["samaccountname"] = "(Not Specified)";
                    rwDefaultUser["UserName"] = "(Not Specified)";
                    rwDefaultUser["DisplayName"] = "(Not Specified)";
                    rwDefaultUser["EMailAddress"] = "(Not Specified)";
                    rwDefaultUser["primaryGroupID"] = "(Not Specified)";
                    tbUser.Rows.Add(rwDefaultUser);                }
                return dsUser;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }        }这段代码 我成功获得了此组中的用户,但不是所有的。
假设a、b两个用户,admin、user两个组,我设置a、b都是这两个组的成员。a、b的主要组都是admin,搜索user组,2个用户都显示出来。
a的主要组为user,b为admin,搜索user组,只显示b用户。a、b主要组都为user,搜索user组,2个用户都不显示出来。
也就是说,搜索X组,该组成员的主要组设置为X组,就不会显示出来。
那我该怎么写,才能获得所有用户呢?

解决方案 »

  1.   

    参考相关:
    http://www.cnblogs.com/insus/archive/2011/08/30/2159776.html
      

  2.   

                    DirectoryEntry de = subEntry.Children.Find("CN=" + group);
                    PropertyCollection pcoll = de.Properties;
                    int pNum = pcoll["member"].Count;
                    for (int i = 0; i < pNum; i++)
                    {
                        string groupStr = de.Properties["member"][i].ToString(); 
                    }你都做出来了 就是 循环组下面的用户 代码就这些。。