【问题标题】:Get all users and contacts from a group in Active Directory从 Active Directory 中的组中获取所有用户和联系人
【发布时间】:2017-06-09 12:07:01
【问题描述】:

我一直在寻找有关从 Active Directory 中的组中获取用户和联系人的解决方案,但找不到。

我了解我无法像用户一样获取联系人,因为他们不是安全主体?

我使用此代码获取我组中的所有用户,是否可以扩展此代码以从联系人中检索姓名和手机号码?还是我需要写一些新的东西?

            var context = new PrincipalContext(ContextType.Domain, "MY_DOMAIN");
            using (var searcher = new PrincipalSearcher())
            {
                var groupName = "MY_GROUP";
                var sp = new GroupPrincipal(context, groupName);
                searcher.QueryFilter = sp;
                var group = searcher.FindOne() as GroupPrincipal;

                if (group == null)
                    Console.WriteLine("Invalid Group Name: {0}", groupName);

                foreach (var f in group.GetMembers())
                {
                    var principal = f as UserPrincipal;

                    if (principal == null || string.IsNullOrEmpty(principal.Name))
                        continue;

                    DirectoryEntry entry = (principal.GetUnderlyingObject() as DirectoryEntry);
                    DirectorySearcher entrySearch = new DirectorySearcher(entry);
                    entrySearch.PropertiesToLoad.Add("mobile");
                    entrySearch.PropertiesToLoad.Add("sAMAccountName");
                    entrySearch.PropertiesToLoad.Add("name");
                    SearchResultCollection results = entrySearch.FindAll();

                    ResultPropertyCollection rpc = results[0].Properties;
                    foreach (string rp in rpc.PropertyNames)
                    {
                        if (rp == "mobile")
                            Console.WriteLine(rpc["mobile"][0].ToString());

                        if(rp == "sAMAccountName")
                            Console.WriteLine(rpc["sAMAccountName"][0].ToString());
                    }

【问题讨论】:

    标签: c# asp.net active-directory directoryentry


    【解决方案1】:

    您不能使用System.DirectoryServices.AccountManagement 命名空间从 Active Directory 中查询联系信息,因为正如您所指出的,它们不是安全原则。您需要直接从组的DirectoryEntry 读取和解析组的member 属性。这将是作为组成员的所有对象的可分辨名称列表。无法从中知道它们是什么类型的对象,因此您需要查询 AD 以找出每个对象。

    在您发布的内容中,您已经拥有完成此操作所需的所有代码,只需将member 属性添加到加载列表中,然后循环加载新的DirectoryEntry 对象。 objectClass 属性会告诉您它是用户、组还是联系人。

    【讨论】:

    • 嘿,谢谢。我使用 DirectoryEntry 和搜索器来查找组成员,然后将它们加载到新条目中。工作完美。
    • @ThorsteinLøkensgard 我很高兴它成功了。请接受这个答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多