Не удается получить свойства некоторых групп в моем AD

Я пытаюсь получить все почтовые группы и их почтовый адрес из системы AD компании. У меня около 1800 групп, но я нашел около 20 гурпов, которые я не могу получить их свойства. Я попытался в моем мировоззрении и получил свойства, как адрес электронной почты правильно. Но я не могу получить их по коду, кто-то, пожалуйста, помогите. Благодарю. Ниже приведен фрагмент моего кода:

    static void TestGroupEmails()
    {
        ICollection<DirectoryEntry> groups = GetGroups();
        Console.WriteLine(groups.Count + "groups");
        List<String> noNameGroups = new List<String>();
        foreach (DirectoryEntry de in groups)
        {
            String name = de.Properties["sAMAccountName"].Value as String;
            String email = de.Properties["mail"].Value as String;
            if (String.IsNullOrEmpty(email))
                noNameGroups.Add(name);
        }
        StreamWriter writer = new StreamWriter(@"C:\ad\group mails.txt");
        noNameGroups.Sort();
        foreach (String name in noNameGroups)
        {
            writer.WriteLine(name);
        }
        writer.Close();
        Console.ReadLine();
    }

    public static List<DirectoryEntry> GetGroups()
    {
        String filter = @"(&(objectCategory=group))";

        List<DirectoryEntry> groups = new List<DirectoryEntry>();

        using (DirectoryEntry root = new DirectoryEntry(Constants.ADConnPrefix))
        {
            using (DirectorySearcher searcher = new DirectorySearcher(filter, null))
            {
                searcher.PageSize = 10000;

                searcher.ReferralChasing = ReferralChasingOption.All;

                searcher.SearchScope = SearchScope.Subtree;

                searcher.SearchRoot = root;

                root.Username = Constants.UserName;
                root.Password = Constants.Password;

                using (SearchResultCollection searchResult = searcher.FindAll())
                {
                    foreach (SearchResult sr in searchResult)
                    {

                        DirectoryEntry de = sr.GetDirectoryEntry();
                        groups.Add(de);

                    }
                }
            }
        }
        return groups;
    }

    public static SearchResult GetGroupInfo(String groupName)
    {
        String normalName = Utility.RemoveLoginNamePrefix(groupName);
        String filterFormat = "(&(objectCategory=group)(sAMAccountName={0}))";
        using (SearchResultCollection searchResult = Search(ADConnPrefix, null, filterFormat, normalName))
        {
            int count = searchResult.Count;
            SearchResult sr = searchResult[0];
            return sr;
        }
    }

1 ответ

Решение

Вы уверены, что у рассматриваемых групп действительно есть адреса электронной почты? Для групп в AD возможно не иметь их.

Если вы измените свой поисковый фильтр на (&(objectCategory=group)(mail=*)) он отфильтрует все группы, у которых нет адресов электронной почты.

Другие вопросы по тегам