我在检索活动目录中某个组的成员时遇到问题。我正在使用的代码如下:
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "fillRow")]
public static IEnumerable getNTGroupMembers(string groupName)
{
SearchResult result;
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(cn={0})", groupName);
search.PropertiesToLoad.Add("member");
result = search.FindOne();
ArrayList userNames = new ArrayList();
if (result != null)
{
for (int counter = 0; counter < result.Properties["member"].Count; counter++)
{
object user = (object)result.Properties["member"][counter];
userNames.Add(user);
}
}
return userNames;
}
但是它返回了以下列表:
CN = X,OU = X,OU = X,OU = X,OU = X,DC = X,DC = X,DC = X
有谁知道如何返回会员的用户名。我尝试过不同的属性,但是我无法让它工作。
这是我为SQL Server 2005创建的CLR函数的一部分。
答案 0 :(得分:0)
我设法做到了。它仍然存在一些问题,由于某些原因,一些AD组不会返回其中的一些成员 如果有人知道更好的方法,请告诉我!
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "fillRow")]
public static IEnumerable getNTGroupMembers(string groupName)
{
SearchResult result;
DirectorySearcher search = new DirectorySearcher();
search.Filter = String.Format("(cn={0})", groupName);
search.PropertiesToLoad.Add("member");
result = search.FindOne();
ArrayList userNames = new ArrayList();
if (result != null)
{
for (int counter = 0; counter < result.Properties["member"].Count; counter++)
{
string st = (string) result.Properties["member"][counter];
DirectoryEntry gpMemberEntry = new DirectoryEntry(("LDAP://" + st));
if (!(gpMemberEntry == null))
{
PropertyCollection userProps = gpMemberEntry.Properties;
object objUser = userProps["sAMAccountname"].Value;
userNames.Add(objUser);
}
}
}
return userNames;
}
private static void fillRow(Object obj, out string user)
{
object row = (object)obj;
user = (string)row;
}