Active Directory用户组成员组主体

Active Directory用户组成员组主体

问题描述:

我试图使用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

我认为你必须在你的方法一个简单的拼写错误 - 你得到集团主要为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

代码的这种修改工作(我做了测试,以确保):

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