2010-08-20 6 views
1

Je suis en train de récupérer tous les gruops e-mail et leur adresse mail du système AD de la société. J'ai environ 1800 groupes mais j'ai trouvé il y a environ 20 gourps dont je ne peux pas obtenir leurs propriétés. J'ai essayé dans mes perspectives et ai obtenu des propriétés comme l'adresse de courrier correctement. Mais je ne peux pas les obtenir par code, quelqu'un s'il vous plaît aider. Merci. Voici mon extrait de code:Impossible d'obtenir les propriétés de certains groupes dans mon AD

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; 
     } 
    } 

Répondre

1

Etes-vous certain que les groupes en question ont réellement des adresses e-mail? Il est possible pour les groupes dans AD de ne pas les avoir.

Si vous modifiez votre filtre de recherche pour (&(objectCategory=group)(mail=*)) il filtrer tous les groupes qui ne sont pas les adresses e-mail.

+0

Merci Bennor. J'ai trouvé quel est le problème, je devrais les interroger par "nom" au lieu de "sAMAccountName", c'est ce que la requête AD montre sur les noms de groupe. Votre chaîne de filtre fonctionne, je peux obtenir tous les groupes d'email de mes compagnies, merci beaucoup –