获取主要组ID

时间:2011-03-14 21:40:49

标签: c# active-directory active-directory-group

尝试获取用户所属的所有组,包括主要组:

做这样的事情:

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

1 个答案:

答案 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