2011-03-09 244 views
6

我試圖使用GroupPrincipalSystem.DirectoryServices.AccountManagement命名空間的一部分)來填充字符串類型的列表,以便我可以檢查用戶是否是Active Directory組的成員。這裏是我迄今爲止編輯的類:Active Directory用戶組成員組主體

public class ActiveDirectoryMembership 
{ 
    private PrincipalContext context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName); 
    private List<string> GroupName {get;set;} 

    public ActiveDirectoryMembership() 
    { 
     //Code snipped - this part returns a list of users 
     populateGroups(); 
    } 

    private void populateGroups() 
    { 
     GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 
     GroupName = new List<string>(); 
     foreach (UserPrincipal p in GroupName.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 

那麼,我該錯在哪裏?

感謝提前:)

+2

你看到了什麼,你怎麼指望** **看? ?? – 2011-03-09 14:34:24

+1

馬特這不是一個真正的問題,這個代碼是如何工作的?你會得到哪些結果?如果您使用斷點檢查,它在調試時的表現如何?你想得到什麼不同於你現在得到的東西? – 2011-03-09 14:36:22

+1

對不起,我沒有收到用戶列表; GroupName的值爲空。我希望看到一個用戶列表(我知道有用戶是該組的成員) - 這是否有意義? – Matt 2011-03-09 14:41:52

回答

0

我認爲你必須在你的方法一個簡單的拼寫錯誤 - 你得到集團主要爲SearchGroup(檢查NULL,順便說一句!),然後你抓會員關閉GroupName ??

試試這個:

private void populateGroups() 
{ 
    GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 

    if(SearchGroup != null) 
    { 
     GroupName = new List<string>(); 

     // call 'GetMembers' on 'SearchGroup' here!! 
     foreach (UserPrincipal p in SearchGroup.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 
} 
+1

我沒有得到運行時/編譯錯誤。我是否需要填充P的值(有效地給我一個用戶列表,以便在通過foreach循環前循環? – Matt 2011-03-09 14:46:51

+2

完全忽略我 - 我的測試正在玩我的頭 - 我做了assert.isnull而不是assert.isnotnull - 現在一切都好! – Matt 2011-03-09 14:53:33

3

代碼的這種修改工作(我做了測試,以確保):

private static readonly string DomainName = "domaincontrollercomputer.domain.com"; 
    private static readonly string DomainContainer = "DC=DOMAIN,DC=COM"; 
    private static readonly string ADGroupName = "AD Group Name"; 
    private List<string> GroupName {get;set;} 

    private void populateGroups() 
    { 
     using (var ctx = new PrincipalContext(ContextType.Domain, DomainName, DomainContainer)) 
     { 
      using (var grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, ADGroupName)) 
      { 
       GroupName = new List<string>(); 
       foreach (var member in grp.GetMembers()) 
       { 
        GroupName.Add(member.SamAccountName); 
       } 
      } 
     } 
    } 
相關問題