Je tente d'interroger ActiveDirectory via LDAP, mais la requête peut contenir des espaces ou d'autres caractères qui peuvent causer des problèmes (des traits d'union?)Interrogation Active Directory avec des espaces contenant des filtres LDAP
(&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs))
Il est une OU recherche par exemple dans SQL il serait WHERE (sn LIKE 'Bloggs%' AND givenName LIKE 'Jo%') OR displayName = 'Jo Bloggs'
Cependant, lorsque je tente la requête LDAP, je reçois une erreur: System.ArgumentException: The (&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs)) search filter is invalid
code pour effectuer la recherche:
string userName = "Jo Bloggs";
DirectoryEntry adroot = new DirectoryEntry("LDAP://" + Environment.UserDomainName, "user", "password", AuthenticationTypes.Secure);
DirectorySearcher search = new DirectorySearcher(adroot);
search.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(|(&(sn={0}*)(givenName={1}*))(displayName={2}))", userName.Split(' ')[1], userName.Split(' ')[0], userName);
Ceci est juste une recherche de base, je vous souhaitez également rechercher d'autres colonnes (titre du poste, numéro de téléphone, département, etc.), par ex. WHERE title LIKE '%foo%' OR telephonenumber LIKE '%foo% OR department LIKE '%foo%'
De même, est-ce que je peux mettre en cache la recherche, donc ActiveDirectory ne reçoit pas beaucoup de hits de la part des personnes qui cherchent t la même chose?
Cela trouve également une seule entrée, je voudrais rechercher et afficher dans un répéteur tous les résultats qui sont trouvés.
Accepté plus de réponses à mes questions précédentes maintenant. Cependant, il y en a quelques-uns qui n'ont pas répondu à la question (soit il n'y a pas de réponse (par exemple ne peut pas être fait, limitation du système), soit les réponses ne répondent pas complètement à la question) – SamWM