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

本文关键字:一起 用户 Directory Active 查看 | 更新日期: 2023-09-27 18:28:13

我的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);
        }
    }
}
}

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

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

我有这个组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();
        }
    }
}
}