C# 列出active directory组的所有成员

C# 列出active directory组的所有成员,c#,active-directory,clr,C#,Active Directory,Clr,在active directory中检索某个组的成员时遇到问题。我使用的代码如下所示: [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "fillRow")] public static IEnumerable getNTGroupMembers(string groupName) { SearchResult result; DirectorySearcher search = ne

在active directory中检索某个组的成员时遇到问题。我使用的代码如下所示:

[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;
    }
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName=“fillRow”)]
公共静态IEnumerable getNTGroupMembers(字符串groupName)
{
搜索结果;
DirectorySearcher search=新建DirectorySearcher();
search.Filter=String.Format(“(cn={0})”,groupName);
search.PropertiesToLoad.Add(“成员”);
结果=search.FindOne();
ArrayList用户名=新的ArrayList();
如果(结果!=null)
{
for(int counter=0;counter
但它返回给我以下列表:

[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函数的一部分。

我成功地做到了这一点。它仍然存在一些问题,由于某些原因,对于某些广告组,它不返回其部分成员。
如果有人知道更好的方法,请告诉我

[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;
}
[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName=“fillRow”)]
公共静态IEnumerable getNTGroupMembers(字符串groupName)
{
搜索结果;
DirectorySearcher search=新建DirectorySearcher();
search.Filter=String.Format(“(cn={0})”,groupName);
search.PropertiesToLoad.Add(“成员”);
结果=search.FindOne();
ArrayList用户名=新的ArrayList();
如果(结果!=null)
{
for(int counter=0;counter
是否有办法修改上述解决方案以获取所有用户,包括属于组成员但位于单独域中的用户?我有一个组,它返回与我正在查询的组关联的用户列表。但是,当我返回用户的ArrayList时,与组不属于同一域的所有用户在SamaAccountName对象的value属性中都有一个空值。