2009-05-27 54 views
3

正如标题所提到的,我需要一种方法来获取组中所有组在ActiveDirectory中的成员。如何使用C#在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))" 

有人知道一个高性能的方式来获得一个组的成员?

回答

4

想我得对我自己:

要获得所有组一组是您成员可以使用

directoryEntry.Properties["memberOf"][0] 

,你会得到所有ADObjects一个String对象的组成员的。

将其拆分为单个AD对象字符串,检查是否有组。

+1

是啊,这是做的方法! – 2009-05-27 15:43:20

2

此代码将让你从登录用户的当前组的列表,它比查询的信息的域控制器更快,因为它散发出来的缓存安全IDENTIFER的:

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

谢谢本,我会试试看。问候。 – Inno 2009-06-02 11:16:29

相关问题