尝试获取用户所属的所有组,包括主要组:
做这样的事情:
DirectoryEntry entry = new DirectoryEntry(LDAP:/domainXYZ, userx, passwordx);
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = String.Format("(&(objectClass=user)(userPrincipalName={0}{1}))", userY, LDAP://domainXYZ);
SearchResultCollection resultColln= searcher.FindOne();
string actualGroupName =string.empty;
string grp ="";
foreach (SearchResult singleRes in resultColln)
{
foreach (object value in singleRes.Properties["memberof"])
{
grp = value.ToString();
Console.WriteLine("group:{0} ", grp);
}
}
这给了我除主要群组以外的所有群组。有没有办法让主要群组名称,除了其他群组之外还使用primaryGroupID
?
答案 0 :(得分:1)
您应该使用以下搜索过滤器
运行其他搜索string.Format("(&(objectCategory=group)(objectClass=group)(primaryGroupToken={0}))", singleRes.Properties["primaryGroupID"]);
primaryGroupToken
是计算属性,在创建组时由Active Directory自动生成。分配给用户的primaryGroupID
正在存储此值。
实际上,如果你想要一个真的简单的方法,我建议UserPrincipal.GetGroups真的很容易。唯一的问题是你只能在.NET 3.5或更高版本中找到它。
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "YourUser"))
{
foreach (Principal p in user.GetGroups())
{
Console.WriteLine(p.Name);
}
}
}
GetGroups
仅返回包含您的用户的群组,包括其主要群组。如果要获取所有嵌套组,可以使用GetAuthorizationGroups
。