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组,就不会显示出来。
那我该怎么写,才能获得所有用户呢?
{
//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组,就不会显示出来。
那我该怎么写,才能获得所有用户呢?
解决方案 »
- MVC3.0
- 删除用户的时候,有关联数据,怎么删
- 有点复杂的SELECT问题,请高手帮忙解答.
- 孟宪会的XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子完整版
- 在ASP.NET中 在提交数据后保持选项卡的选项不变
- 为什么我在未用IE浏览ASP.NET网页时,进入所在的目录,里面的文件是可写的(如.mdb文件)。当一浏览就变了是只读了,有什么方法改为可读
- 求一正则表达式:共13位数字和英文字符组成,前两位必须为数字
- excel导出功能
- 大侠看一见或许就能给解决的ASP.NET问题
- 紧急SOS~如何写二进制文件?
- MVC3.0中CheckBox添加数据要怎么做
- [急,急,急]Asp.net 关于checkBox...求解
http://www.cnblogs.com/insus/archive/2011/08/30/2159776.html
PropertyCollection pcoll = de.Properties;
int pNum = pcoll["member"].Count;
for (int i = 0; i < pNum; i++)
{
string groupStr = de.Properties["member"][i].ToString();
}你都做出来了 就是 循环组下面的用户 代码就这些。。