Question

Je dois rechercher tous les utilisateurs contenant une certaine chaîne de texte en leur nom contre 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 nécessaire (non Active Directory) car il contient les utilisateurs à travers les domaines. Il est aussi ce que le client a demandé.

J'ai regardé les services Web Exchange et méthodes Outlook Web Access. Cependant ne peut être configuré dans mon organisation, donc je dois savoir quelle option est la bonne avant de demander l'infrastructure pour le configurer.

Services Web Exchange

J'espérais utiliser la méthode ResolveNames dans les services Web Exchange . La documentation pour elle stipule que:

  

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

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

Outlook Web Access

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

Quelqu'un peut-il s'il vous plaît donner des conseils sur ces questions ou toute autre option?

Était-ce utile?

La solution

Il est possible d'interroger l'ensemble des domaines en commençant la requête à partir de la racine de la forêt. Voici le code que je 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
    }
}

Autres conseils

Je ne suis pas un expert en échange, mais tu ne peux pas faire, utilisez Collaboration Data Objects (CDO) bien qu'il ne pourrait pas être trop rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top