Active Directory用户组成员组主体
问题描述:
我试图使用GroupPrincipal
(System.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);
}
}
那么,我该错在哪里?
感谢提前:)
答
我认为你必须在你的方法一个简单的拼写错误 - 你得到集团主要为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 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);
}
}
}
}
你看到了什么,你怎么指望** **看? ?? – 2011-03-09 14:34:24
马特这不是一个真正的问题,这个代码是如何工作的?你会得到哪些结果?如果您使用断点检查,它在调试时的表现如何?你想得到什么不同于你现在得到的东西? – 2011-03-09 14:36:22
对不起,我没有收到用户列表; GroupName的值为空。我希望看到一个用户列表(我知道有用户是该组的成员) - 这是否有意义? – Matt 2011-03-09 14:41:52