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