Directoryservices 无法获取我的广告中某些组的属性

Directoryservices 无法获取我的广告中某些组的属性,directoryservices,Directoryservices,我正试图从公司的广告系统中检索所有的电子邮件群组和他们的邮件地址。我有大约1800组,但我发现大约有20个葫芦,我无法得到它们的属性。我在outlook中进行了尝试,并正确获取了邮件地址等属性。但我无法通过代码获取它们,请有人帮助。谢谢下面是我的代码片段: static void TestGroupEmails() { ICollection<DirectoryEntry> groups = GetGroups(); Console.W

我正试图从公司的广告系统中检索所有的电子邮件群组和他们的邮件地址。我有大约1800组,但我发现大约有20个葫芦,我无法得到它们的属性。我在outlook中进行了尝试,并正确获取了邮件地址等属性。但我无法通过代码获取它们,请有人帮助。谢谢下面是我的代码片段:

    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;
        }
    }
static void TestGroupEmails()
{
ICollection groups=GetGroups();
Console.WriteLine(groups.Count+“groups”);
List noNameGroups=新列表();
foreach(组中的目录条目de)
{
字符串名称=de.Properties[“sAMAccountName”]。值为字符串;
字符串email=de.Properties[“mail”]。值为字符串;
if(String.IsNullOrEmpty(电子邮件))
添加(名称);
}
StreamWriter=newstreamwriter(@“C:\ad\group mails.txt”);
noNameGroups.Sort();
foreach(非megroup中的字符串名称)
{
作者:WriteLine(姓名);
}
writer.Close();
Console.ReadLine();
}
公共静态列表GetGroups()
{
字符串筛选器=@“(&(objectCategory=group))”;
列表组=新列表();
使用(DirectoryEntry root=new DirectoryEntry(Constants.ADConnPrefix))
{
使用(DirectorySearcher searcher=new DirectorySearcher(筛选器,null))
{
searcher.PageSize=10000;
searcher.ReferralChasing=ReferralChasingOption.All;
searcher.SearchScope=SearchScope.Subtree;
searcher.SearchRoot=root;
root.Username=Constants.Username;
root.Password=Constants.Password;
使用(SearchResultCollection searchResult=searcher.FindAll())
{
foreach(SearchResult中的SearchResult sr)
{
DirectoryEntry de=sr.GetDirectoryEntry();
添加(de);
}
}
}
}
返回组;
}
公共静态搜索结果GetGroupInfo(字符串groupName)
{
字符串normalName=Utility.RemoveLoginNamePrefix(groupName);
字符串filterFormat=“(&(objectCategory=group)(sAMAccountName={0}));
使用(SearchResultCollection searchResult=Search(ADConnPrefix,null,filterPerformat,normalName))
{
int count=searchResult.count;
SearchResult sr=SearchResult[0];
返回sr;
}
}

您确定有问题的小组确实有电子邮件地址吗?AD中的组可能没有它们


如果您将搜索过滤器修改为
(&(objectCategory=group)(mail=*)
,它将过滤掉所有没有电子邮件地址的组。

您确定有问题的组确实有电子邮件地址吗?AD中的组可能没有它们


如果您将搜索过滤器修改为
(&(objectCategory=group)(mail=*)
,它将过滤掉所有没有电子邮件地址的组。

谢谢Bennor。我发现了问题所在,我应该用“name”而不是“sAMAccountName”来查询它们,这就是广告查询显示的组名。你的过滤字符串有效,我可以获得我所有公司的电子邮件组,非常感谢Hanks Bennor。我发现了问题所在,我应该用“name”而不是“sAMAccountName”来查询它们,这就是广告查询显示的组名。你的过滤字符串工作,我可以得到我所有公司的电子邮件组,非常感谢