如何使用C#获取ActiveDirectory中一个组所属的所有组?

3
作为标题所述,我需要一种方法来获取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))"

有没有一种高效的方法可以获取一个组所属的所有组?
2个回答

4

我想我可以自己解决:

要获取一个组所属的所有组,您可以使用以下方法

directoryEntry.Properties["memberOf"][0]

你将获得一个字符串对象,其中包含你的组成员的所有AD对象。

将其拆分为单个的AD-Object字符串,检查是否为该组。


1
是的,这就是正确的做法! - marc_s

2

这段代码将为您获取当前登录用户的组列表,它比查询域控制器更快,因为它来自缓存的安全标识符:

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());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接