Pregunta

Tengo que buscar todos los usuarios que contienen una cadena de texto determinado en su nombre en contra de la lista global de direcciones de Exchange Server. Esta operación se realizará a partir de una aplicación ASP.NET. Tenga en cuenta que el GAL se requiere (no Active Directory), ya que contiene los usuarios a través de dominios. Es también lo que solicitó el cliente.

He estado buscando en servicios web de Exchange y métodos de Outlook Web Access. Sin embargo, ni puede ser configurado en mi organización por lo que necesito saber qué opción es la correcta antes de pedir a la infraestructura para configurarlo.

servicios web de Exchange

Yo esperaba utilizar el ResolveNames método en el Exchange Web Services . La documentación de que dispone lo siguiente:

  

Active Directory se busca en primer lugar, y luego se busca en la carpeta de contactos del usuario.

Parece dar a entender que este método los usuarios sólo volver desde el dominio actual. ¿Es esto correcto?

Outlook Web Access

La otra opción que encontré fue GALFind. Esto se ve perfecto, pero este artículo afirmó que es sin soporte . Se confirma que ya no está disponible en este artículo Technet .

Puede alguien por favor dar consejos sobre estas u otras opciones?

¿Fue útil?

Solución

Es posible consultar a través de dominios iniciando la consulta desde la raíz del bosque. Aquí está el código que terminé usando:

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

Otros consejos

No soy un experto Exchange, pero no puede hacer esto usando Objetos de datos de colaboración (CDO), aunque puede que no sea demasiado rápida .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top