2009-08-11 4 views
2

Je dois rechercher tous les utilisateurs contenant une chaîne de caractères dans leur nom par rapport à la liste d'adresses globale Exchange Server. Cette opération sera effectuée à partir d'une application ASP.NET. Notez que la liste d'adresses globale est requise (pas Active Directory) car elle contient des utilisateurs sur plusieurs domaines. C'est aussi ce que le client a demandé.Interrogation de la liste d'adresses globale (GAL) pour les utilisateurs de plusieurs domaines

J'ai examiné les méthodes Exchange Web Services et Outlook Web Access. Cependant, aucune d'entre elles ne peut être configurée dans mon organisation. J'ai donc besoin de savoir quelle est la bonne option avant de demander à l'infrastructure de la configurer.

Exchange Web Services

j'espérais d'utiliser la méthode ResolveNames dans Exchange Web Services. La documentation pour elle indique que:

Active Directory est d'abord recherché, puis le dossier de contact de l'utilisateur est recherché.

Il semble impliquer que cette méthode ne retournera que les utilisateurs du domaine actuel. Est-ce correct?

Outlook Web Access

L'autre option que j'ai trouvé GALFind. Cela semble parfait, mais this article a déclaré qu'il est non pris en charge. Il est confirmé que cet article n'est plus disponible dans cet article Technet.

Quelqu'un peut-il donner des conseils sur ces options ou d'autres?

Répondre

3

Il est possible d'interroger plusieurs domaines en démarrant la requête à partir de la racine de la forêt. Voici le code que j'ai fini par utiliser:

string filter = "(&(objectCategory=person)(objectClass=user)(name=*" + search + "*))"; 
var rootEntry = new DirectoryEntry("GC:"); 
foreach (DirectoryEntry entry in rootEntry.Children) 
{ 
    DirectoryEntry forestEntry = entry; 
    DirectorySearcher searcher = new DirectorySearcher 
     { 
      SearchRoot = forestEntry, 
      Filter = filter, 
      Sort = 
       { 
        Direction = SortDirection.Ascending, 
        PropertyName = "cn" 
       } 
     }; 
    searcher.PropertiesToLoad.AddRange(ADProperties.Values.ToArray()); 
    SearchResultCollection results = searcher.FindAll(); 
    foreach (SearchResult result in results) 
    { 
     DirectoryEntry foundEntry = result.GetDirectoryEntry(); 

     // Do something 
    } 
} 
+1

+1 pour l'affichage de votre solution –

Questions connexes