Domanda

Devo cercare tutti gli utenti che contengono una determinata stringa di testo nel loro nome rispetto all'elenco indirizzi globale di Exchange Server.Questa operazione verrà eseguita da un'applicazione ASP.NET.Tieni presente che l'elenco indirizzi globale è obbligatorio (non Active Directory) poiché contiene utenti di domini diversi.È anche ciò che il cliente ha richiesto.

Ho esaminato i metodi dei servizi Web Exchange e di Outlook Web Access.Tuttavia nessuno dei due può essere configurato nella mia organizzazione, quindi devo sapere quale è l'opzione giusta prima di chiedere all'infrastruttura di configurarla.

Servizi Web di scambio

Speravo di utilizzare il Risolvi nomi metodo nei servizi Web Exchange.La documentazione ad esso relativa afferma che:

La ricerca viene eseguita prima in Active Directory, quindi nella cartella dei contatti dell'utente.

Sembra implicare che questo metodo restituirà solo gli utenti del dominio corrente.È corretto?

Outlook Web Access

L'altra opzione che ho trovato è stata GALFind.Sembra perfetto ma Questo articolo ha dichiarato che lo è non supportato.Si conferma che non è più disponibile in questo Technet articolo.

Qualcuno può darmi consigli su queste o altre opzioni?

È stato utile?

Soluzione

È possibile eseguire query tra domini avviando la query dalla radice della foresta.Ecco il codice che ho finito per utilizzare:

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

Altri suggerimenti

Non sono un esperto di Exchange ma non puoi farlo utilizzando Oggetti dati di collaborazione (CDO) anche se potrebbe non esserlo troppo veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top