代码之家  ›  专栏  ›  技术社区  ›  Matt

在活动目录中查找特定用户所属的组/通讯组列表

  •  2
  • Matt  · 技术社区  · 15 年前

    假设我在里面

    OU=Groups,DC=contaco,DC=com,ct
    

    我可以在AU-OU中找到所有的组,但是找到所有用户“Bododle”的唯一方法是让我查看每个组,看看他是否在“成员”字段中。

    不幸的是,当我查看用户“bobdole”时,我没有看到包含所有这些列表的member of字段,因此我必须枚举每个组/通讯组列表并查看他是哪个组的成员。

    没有比这更有效的方法了吗?我在C

    2 回复  |  直到 13 年前
        1
  •  4
  •   mxmissile    15 年前

    这将返回用户所属的所有角色(组)。

    public string[] GetRolesForUser(DirectoryEntry user)
    {       
        user.RefreshCache(new string[] { "tokenGroups" });
    
        var irc = new IdentityReferenceCollection(user.Properties["tokenGroups"].Count);
        foreach (byte[] sidBytes in user.Properties["tokenGroups"])
            irc.Add(new SecurityIdentifier(sidBytes, 0));
    
        var coll = new StringCollection();
        irc = irc.Translate(typeof(NTAccount));
    
        foreach (var ir in irc)
        {
            if (ir is NTAccount)
            {
                coll.Add(ir.ToString());
            }
        }
        var accounts = new string[coll.Count];
    
        coll.CopyTo(accounts, 0);
        return accounts;
    }
    
        2
  •  1
  •   Brian Webster    13 年前

    如果我错了,请纠正我,但我很确定“令牌组”不包含DistributionGroups,而只包含SecurityGroups/Roles。