查看Active Directory中的一个组,并监听所有用户的所有组,直到级别3

时间:2014-10-29 14:45:10

标签: c# active-directory directoryentry

我的C#代码有问题,我希望在一个特定的组下显示所有组,名为L_P001xxx。

我最终想要的是从组L_P001xxx开始,我希望显示所有组,直到级别3和级别3,我想只显示用户。

我认为我必须通过递归解决这个问题,但它没有按预期工作。

现在我得到的是:

该组的第一个成员,称为A96XYZ,然后是该组的第一个用户,但之后它被卡住了,我不知道为什么。

这是我的错误消息:

{"Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"}

这是我的代码:

namespace ADQuery
{
    class Program
    {
        static void Main(string[] args)
        {
        DirectoryEntry root = new DirectoryEntry(String.Format("WinNT://{0},Computer", "10.18.6.9"), null, null, AuthenticationTypes.Secure);
        DirectoryEntry admGroup = root.Children.Find("L_P00142W", "group");
        DoForEveryNode(admGroup);
    }

    static void DoForEveryNode(DirectoryEntry de)
    {
        object members = de.Invoke("members", null);
        foreach (object groupMember in (IEnumerable)members)
        {
            DirectoryEntry member = new DirectoryEntry(groupMember);
            Console.WriteLine(member.Name);
            DoForEveryNode(member);
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

我做了一些工作,现在我可以阅读每个小组的用户,但仍然有一个小问题。

我有这个组L_P00142W,并且该组有一个名为L_ext_P00142W的域本地组,而我无法访问此组。

所有其他小组不再是我要读的问题,但这个小组总是被忽略。 也许有人知道我能做什么或应该做什么?这是我的代码:

namespace ADQuery
{
class Program
{
    static void Main(string[] args)
    {
        //GetUserLocalGroups("L_P00142", "10.18.6.9", "s-gruppe");
        DirectoryEntry root = new DirectoryEntry(String.Format("WinNT://{0},Computer", "ip-address"), null, null, AuthenticationTypes.Secure);
        DirectoryEntry admGroup = root.Children.Find("L_P00142W", "group");
        DoForEveryNode(admGroup);
    }

    static void DoForEveryNode(DirectoryEntry de)
    {
        if (de.SchemaClassName == "Group")
        {
            object members = de.Invoke("members", null);
            foreach (object groupMember in (IEnumerable)members)
            {
                DirectoryEntry member = new DirectoryEntry(groupMember);
                if (member.SchemaClassName == "User")
                    Console.WriteLine("I am a user: " + member.Name);
                else
                {
                    Console.WriteLine("I am a group: " + member.Name);
                    DoForEveryNode(member);
                }
            }
            Console.ReadLine();
        }
    }
}
}