3

我正在使用 DirectorySearcher 获取 ActiveDirectory 中的用户组。

我的问题是,一旦我使用“memberOf”获取用户组,如何获取与每个组关联的 SID?

我在 .NETFramework 2.0 环境中工作。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();
4

3 回答 3

4

无法在一次 LDAP 搜索中执行此操作,因为会memberOf返回一个可分辨名称。您必须进行另一个绑定才能objectSid从组对象中获取属性。这是代码。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();

foreach (string dn in searchresult.Properties["memberOf"])
{
    DirectoryEntry group = new DirectoryEntry(string.Format("LDAP://{0}/{1}", sUserDomain, dn));
    SecurityIdentifier sid = new SecurityIdentifier(group.Properties["objectSid"][0] as byte[], 0);
    Console.Out.WriteLine(sid.Value);
}
于 2012-07-04T02:36:43.887 回答
1

如果您使用的是 .NET 3.5 及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM) 命名空间。在这里阅读所有相关信息:

基本上,您可以定义域上下文并在 AD 中轻松找到用户和/或组:

    // define context for current domain
    using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
    {
        // find  user 
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "YourNameHere");

        if (user != null)
        {
            // get groups the user is a member of
            var groups = current.GetGroups();

            // iterate over all those groups
            foreach(var group in groups)
            {
                // fetch the SID for each group
                var sid = group.Sid;
            }
        }
    }   

新的 S.DS.AM 使得在 AD 中与用户和组一起玩变得非常容易!

于 2012-07-03T11:19:43.600 回答
1

看看他的文章: Retrieving user SID using DirectoryEntry and DirectorySearcher

这为您提供了检索 SID 的完整工作示例。

于 2012-07-03T11:20:56.517 回答