C# Active Directory用户组成员资格GroupPrincipal

C# Active Directory用户组成员资格GroupPrincipal,c#,active-directory,C#,Active Directory,我正在尝试使用GroupPrincipal(系统.DirectoryServices.AccountManagement命名空间的一部分)填充类型字符串列表,以便检查用户是否是Active Directory组的成员。以下是我到目前为止编写的编辑类: public class ActiveDirectoryMembership { private PrincipalContext context = new PrincipalContext(ContextType.Domain, Env

我正在尝试使用
GroupPrincipal
(系统.DirectoryServices.AccountManagement命名空间的一部分)填充类型字符串列表,以便检查用户是否是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);
        }
    }
公共类ActiveDirectoryMembership
{
private PrincipalContext context=新PrincipalContext(ContextType.Domain,Environment.UserDomainName);
私有列表组名{get;set;}
公共ActiveDirectoryMembership()
{
//代码截断-此部分返回用户列表
populategroup();
}
私有void populategroup()
{
GroupPrincipal SearchGroup=GroupPrincipal.FindByIdentity(上下文,“组名”);
GroupName=新列表();
foreach(GroupName.GetMembers()中的UserPrincipal p)
{
GroupName.add(p.SamAccountName);
}
}
那么,我错在哪里呢


提前感谢:)

我想你的方法中有一个简单的输入错误-你正在将组负责人放入
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);
       }
    }
}
private void populategroup()
{
GroupPrincipal SearchGroup=GroupPrincipal.FindByIdentity(上下文,“组名”);
if(SearchGroup!=null)
{
GroupName=新列表();
//在“搜索组”中调用“GetMembers”!!
foreach(SearchGroup.GetMembers()中的UserPrincipal p)
{
GroupName.add(p.SamAccountName);
}
}
}

对代码的这一修改有效(我进行了测试以确保):

使用System.DirectoryServices.AccountManagement;
私有静态只读字符串DomainName=“domaincontrollercomputer.domain.com”;
私有静态只读字符串DomainContainer=“DC=DOMAIN,DC=COM”;
私有静态只读字符串ADGroupName=“AD Group Name”;
私有列表组名{get;set;}
私有void populategroup()
{
使用(var ctx=new PrincipalContext(ContextType.Domain、DomainName、DomainContainer))
{
使用(var grp=GroupPrincipal.FindByIdentity(ctx,ADGroupName))
{
GroupName=新列表();
foreach(grp.GetMembers()中的var成员)
{
GroupName.Add(member.SamAccountName);
}
}
}
}

你看到了什么,你希望看到什么???马特这不是一个真正的问题,这段代码是如何工作的?你得到了哪些结果?如果你检查断点,它在调试时表现如何?你希望得到什么不同于你现在得到的?抱歉,我没有得到用户列表;GroupName的值是空的。我希望要查看用户列表(我知道有属于该组的用户)-这有意义吗?我没有收到运行时/编译错误。我需要填充P的值吗(在运行foreach循环之前,有效地给我一个要循环的用户列表?完全忽略我-我的测试是在玩弄我的头-我确实断言了。isnull和不断言。isnotnull-现在一切都好了!
using System.DirectoryServices.AccountManagement;


    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, ADGroupName))
            {
                GroupName = new List<string>();
                foreach (var member in grp.GetMembers())
                {
                    GroupName.Add(member.SamAccountName);
                }
            }
        }
    }