2009-08-11 8 views
2

Ich muss nach allen Benutzern suchen, die eine bestimmte Textzeichenfolge in ihrem Namen für die globale Exchange Server-Adressliste enthalten. Dieser Vorgang wird von einer ASP.NET-Anwendung ausgeführt. Beachten Sie, dass die GAL erforderlich ist (nicht Active Directory), da sie Benutzer über Domänen hinweg enthält. Es ist auch, was der Kunde gewünscht hat.Abfragen der globalen Adressliste (GAL) für Benutzer über Domänen hinweg

Ich habe Exchange Web Services und Outlook Web Access-Methoden untersucht. In meinem Unternehmen kann dies jedoch nicht konfiguriert werden. Daher muss ich wissen, welche Option die richtige ist, bevor ich die Infrastruktur anfordere, sie zu konfigurieren.

Exchange Web Services

Ich hoffte, dass die ResolveNames Methode in Exchange Web Services zu nutzen. Die Dokumentation dafür besagt, dass:

Active Directory zuerst gesucht wird, und dann der Kontaktordner des Benutzers gesucht wird.

Es scheint zu implizieren, dass diese Methode nur Benutzer aus der aktuellen Domäne zurückgibt. Ist das richtig?

Outlook Web Access

Die andere Option fand ich war GALFind. Das sieht perfekt aus, aber this article gab an, dass es nicht unterstützt ist. Es wird bestätigt, dass in diesem Artikel Artikel Technet nicht mehr verfügbar ist.

Kann jemand bitte zu diesen oder anderen Optionen beraten?

Antwort

3

Es ist möglich, domänenübergreifend abzufragen, indem die Abfrage vom Gesamtstrukturstamm aus gestartet wird. Hier ist der Code, den ich verwendet habe:

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 für die Buchung Ihrer Lösung –

Verwandte Themen