3

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

做这样的事情:

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

4

1 回答 1

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.

于 2011-03-14T22:15:05.877 回答