C# 获取主组ID

C# 获取主组ID,c#,active-directory,active-directory-group,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}))", u

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

这样做:

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
获取主要组的名称

您应该使用以下搜索筛选器运行另一个搜索

string.Format("(&(objectCategory=group)(objectClass=group)(primaryGroupToken={0}))", singleRes.Properties["primaryGroupID"]);
primaryGroupToken
是一个计算属性,在创建组时由Active Directory自动生成。分配给用户的
primaryGroupID
正在存储此值

事实上,如果你想要一个非常简单的方法,我建议是非常简单的。唯一的问题是,您只能在.NET3.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

这有帮助吗?我认为您的第一个示例需要是:
singleRes.Properties[“primaryGroupID”].Value
而不是简单的:
singleRes.Properties[“primaryGroupID”]
,除此之外,您不能将构造的属性用作LDAP筛选器: