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筛选器: