如何使用C#在ActiveDirectory中获取组成员的组?

如何使用C#在ActiveDirectory中获取组成员的组?,c#,.net,active-directory,C#,.net,Active Directory,正如标题所提到的,我需要一种方法来获取ActiveDirectory中一个组所属的所有组 要获取用户所属的所有组,我使用 public static DirectoryEntry[] GetGroupsUserIsMemberOf(DirectoryEntry directoryEntry) { ArrayList groupsUserIsMemberOf = new ArrayList(); object groups

正如标题所提到的,我需要一种方法来获取ActiveDirectory中一个组所属的所有组

要获取用户所属的所有组,我使用

public static DirectoryEntry[] GetGroupsUserIsMemberOf(DirectoryEntry directoryEntry)
{
    ArrayList        groupsUserIsMemberOf = new ArrayList();
    object           groups               = null;
    DirectoryEntry[] userGroupEntries     = null;

    if (directoryEntry != null && directoryEntry.SchemaClassName == "user") {
        groups = directoryEntry.Invoke("Groups", null);

        foreach (object group in (IEnumerable)groups) {
            groupsUserIsMemberOf.Add(new DirectoryEntry(group));
        }

        userGroupEntries = (DirectoryEntry[])groupsUserIsMemberOf.ToArray(typeof(DirectoryEntry));
    }

    return userGroupEntries;
}
但是当你尝试的时候

public static DirectoryEntry[] GetGroupsGroupIsMemberOf(DirectoryEntry directoyEntry)
{
    ArrayList        groupsGroupIsMemberOf = new ArrayList();
    object           groups               = null;
    DirectoryEntry[] groupEntry       = null;

    if (directoyEntry != null && directoyEntry.SchemaClassName == "group") {
        groups = directoyEntry.Invoke("Groups", null); // throws exception (see below)

        foreach (object group in (IEnumerable)groups) {
            groupsGroupIsMemberOf.Add(new DirectoryEntry(group));
        }

        groupEntry = (DirectoryEntry[])groupsGroupIsMemberOf.ToArray(typeof(DirectoryEntry));
    }

    return groupEntry;
}
要获取所有组,组是该行的成员

        groups = directoyEntry.Invoke("Groups", null); // throws exception (see below)
引发异常:

"Unknown name. (exception HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"

是否有人知道一种性能良好的方法来获取一个组所属的所有组?

我想我自己就有了:

要获取某个组所属的所有组,您可以使用

directoryEntry.Properties["memberOf"][0]
您将得到一个字符串对象,其中包含您的组所属的所有ADObject


将其拆分为单个AD对象字符串,检查组和您是否得到了它。

此代码将从当前登录的用户获取组列表,它比查询域控制器的信息要快,因为它来自缓存的安全标识:

WindowsIdentity currentIdent = WindowsIdentity.GetCurrent();
IdentityReferenceCollection currentGroups = currentIdent.Groups;

List<String> groups = new List<string>();
foreach (IdentityReference indentity in currentGroups)
{
   groups.Add(indentity.Translate(typeof(NTAccount)).ToString());
}
WindowsIdentity CurrentIdentity=WindowsIdentity.GetCurrent();
IdentityReferenceCollection currentGroups=当前标识组;
列表组=新列表();
foreach(当前组中的标识引用标识)
{
Add(indentity.Translate(typeof(NTAccount)).ToString());
}

是的,就是这样做的!谢谢你,本,我会试试的。当做