代码之家  ›  专栏  ›  技术社区  ›  Alan Featherston

列出活动目录组的所有成员

  •  0
  • Alan Featherston  · 技术社区  · 16 年前

    我在检索活动目录中某个组的成员时遇到问题。我使用的代码如下:

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   Alan Featherston    16 年前

    我设法做到了。它仍然有一些问题,因为某些原因,一些广告集团,它不返回其一些成员。
    如果有人知道更好的方法,请告诉我!

    [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;
    }