2009-05-27 58 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

相關問題