none
.Net et Active Directory : Récupérer Login à partir du nom RRS feed

  • Question

  • Bonjour à toute la communauté,

     

    je suis actuellement en train de développer une application autour de l'Active Directory, en VB.Net. Il se trouve que je dois récupérer les groupes associés à une utilisateur. Cependant, toutes les codes sources que j'ai trouvé sur le web permettent de récupérer ces groupes à partir du SAMAccountName. Sauf que, dans mon cas, je dois les trouver par rapport au nom et au prénom de l'utilisateur. Quand je regarde les propriétés, il ne me récupère aucun groupe, mais juste le nom, le prénom, l'adresse email et le numéro de téléphone, c'est tout.

    Si mon filtre est searcher.Filter = "(sn=SAMAccountNameRecherché)", ça fonctionne impeccable

    Si mon filtre est searcher.Filter = "(cn=" & "dupont*eric*" & ")" ou searcher.Filter = String.Format("(&(givenName={0})(sn={1}))", "eric", "dupont") ou même "(DistinguishedName=" & "CN=Dupont Eric XXAI12345,OU=Contacts,OU=AIUY,DC=aiuy,DC=fr,DC=int,DC=societeaiuy,DC=com" & ")"  , ca ne me récupère que quelques infos, mais pas le SAMAccountName, ni même les groupes.

     

    Dim Ldap As DirectoryEntry = New DirectoryEntry("LDAP://MonLDAP.Societe.com", "MonLogindeConnexion", "MonMotdePassedeConnexion")
    Dim searcher As DirectorySearcher = New DirectorySearcher(Ldap)
    
    searcher.Filter = "(cn=" & "dupont*john*" & ")"
    
    Dim DirEntry As DirectoryEntry
    Dim result As SearchResult = searcher.FindOne
    DirEntry = result.GetDirectoryEntry
    
    rtbText.Clear() 'RichtextBox qui affiche les infos
    
      rtbText.AppendText("Login : " + DirEntry.Properties("SAMAccountName").Value & vbNewLine)
      rtbText.AppendText("displayname : " + DirEntry.Properties("displayname").Value & vbNewLine)
      rtbText.AppendText("Nom : " + DirEntry.Properties("sn").Value & vbNewLine)
      rtbText.AppendText("Prénom : " + DirEntry.Properties("givenName").Value & vbNewLine)
      rtbText.AppendText("Email : " + DirEntry.Properties("mail").Value & vbNewLine)
      rtbText.AppendText("Tél : " + DirEntry.Properties("TelephoneNumber").Value & vbNewLine)
      rtbText.AppendText("Description : " + DirEntry.Properties("description").Value & vbNewLine)
      Dim mesGroupes As Object = DirEntry.Invoke("Groups")
      ' Récupération de la liste des groupes
      For Each unGroupe As Object In CType(mesGroupes, IEnumerable)
       Dim groupEntry As DirectoryEntry = New DirectoryEntry(unGroupe)
       maListeGroupes.Add(groupEntry.Name)
       rtbText.AppendText("groupe : " & groupEntry.Properties("distinguishedName").Value & vbNewLine)
      Next
    

     

    Savez-vous pourquoi? Comment puis-je alors récupérer un SAMAccountName à partir du nom et du prénom ?


    Cyril
    • Modifié Cyril PERNOT lundi 16 mai 2011 09:20 oublie d'une phrase
    • Type modifié Ciprian Duduiala dimanche 22 mai 2011 12:16 pas de réponse de l'utilisateur qui a lancé la question
    • Type modifié Ciprian Duduiala lundi 23 mai 2011 06:34 solution trouvée
    lundi 16 mai 2011 09:16

Réponses

  • Bonjour,

    Faut faire attention au john*dupont* car si il y a plusieurs nom qui ce ressemble cela pourrais ressortir johnna (si il en existe un) avec un nom duponto (a)(i)(s) ...
    puis faire une recherche par nom prénom ou l'inverse pourrais ne pas être l’exactitude de la recherche (la pertinence)

    le mieux ne serait il pas de faire une recherche par login si possible ?

    Si vous avez des soucis de recherche de propriété vous pouvez vous aider d'une application qui s'appelle ADSI Edit cette application est très facile a utiliser et a comprendre comment ça fonctionne.


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 19 mai 2011 17:39
  • Bonjour à tous,

     

    Merci infiniment pour vos réponses très pertinentes, qui m'ont permis de trouver le pourquoi du comment. Alors effectivement Xavier, tu as tout à fait raison pour les étoiles, je les ai donc retiré, ce qui évite de récupérer "johnny" quand on cherche "john". En suite, je viens de comprendre pourquoi je ne récupère pas le SAMAccount.

    Je viens de tester ceci (merci Ciprian)

     

    (searcher.Filter = String.Format("(&(givenName={0})(sn={1}))", "eric", "dupont"))
    

     

    sur un autre réseau client, et cela me ramène bien le SAMAccount, les groupes ,etc..., alors que sur mon réseau entreprise, je ne le récupère pas, pas même les groupes. Je pense que c'est probablement lié aux paramétrages spécifiques par les administrateurs (enfin je suppose).

    Chacune de vos réponses pour permis d'avancer et j'ai pu paufiner et terminer mon application. Je vous en remercie, et vous souhaite une bonne continuation à tous ;)

     

    Cyril


    Cyril
    dimanche 22 mai 2011 22:32

Toutes les réponses

  • Bonjour,

    J’ai vérifié votre code et tout marche bien. Le seul problème que j’ai identifié dans votre code est une petite inversion entre le nom et le prénom qui pourrait générer des erreurs. Par exemple, searcher.Filter = "(cn=" & "dupont*john*" & ")" devrait être searcher.Filter = "(cn=" & "john*dupont*" & ")".

     

    J’ai teste aussi searcher.Filter = String.Format("(&(givenName={0})(sn={1}))", "eric", "dupont"), bien sûr avec autres valeurs pour le nom et prénom pour pouvoir obtenir des résultats sur ma réseau et j’ai pu récupérer SAMAccountName et les groupes.

    Vous dites « ca ne me récupère que quelques infos, mais pas le SAMAccountName, ni même les groupes. » Je voudrais savoir si les autres informations (email, numéro de téléphone sont récupérées) ou le résultat de la recherche est une liste sans éléments ?

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 19 mai 2011 15:47
  • Bonjour,

    Faut faire attention au john*dupont* car si il y a plusieurs nom qui ce ressemble cela pourrais ressortir johnna (si il en existe un) avec un nom duponto (a)(i)(s) ...
    puis faire une recherche par nom prénom ou l'inverse pourrais ne pas être l’exactitude de la recherche (la pertinence)

    le mieux ne serait il pas de faire une recherche par login si possible ?

    Si vous avez des soucis de recherche de propriété vous pouvez vous aider d'une application qui s'appelle ADSI Edit cette application est très facile a utiliser et a comprendre comment ça fonctionne.


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 19 mai 2011 17:39
  • Bonjour,

    Oui, vous avez raison. Mais, si on utilise l’autre variante (searcher.Filter = String.Format("(&(givenName={0})(sn={1}))", "eric", "dupont")) on va obtenir l’utilisateur qu’on cherche s'il existe et Cyril dit que ça ne fonctionne pas. Il est difficile à comprendre la cause parce qu’on n’a pas des détails sur le résultat de la recherche pour chaque variante essayée.

    Normalement la recherche se fait par login, mais si on ne sait pas le login et on veut le trouver en utilisant le nom et prénom, le filtre nous permet le faire.

    Puis, vous dites aussi « puis faire une recherche par nom prénom ou l'inverse pourrais ne pas être l’exactitude de la recherche (la pertinence) ». Normalement, l’ordre est prénom nom et c’est l’ordre utilisée la plus part du temps, mais oui… peut-être ce sujet n’est pas vraiment important pour l’exemple de Cyril.

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 20 mai 2011 06:34
  • Bonjour à tous,

     

    Merci infiniment pour vos réponses très pertinentes, qui m'ont permis de trouver le pourquoi du comment. Alors effectivement Xavier, tu as tout à fait raison pour les étoiles, je les ai donc retiré, ce qui évite de récupérer "johnny" quand on cherche "john". En suite, je viens de comprendre pourquoi je ne récupère pas le SAMAccount.

    Je viens de tester ceci (merci Ciprian)

     

    (searcher.Filter = String.Format("(&(givenName={0})(sn={1}))", "eric", "dupont"))
    

     

    sur un autre réseau client, et cela me ramène bien le SAMAccount, les groupes ,etc..., alors que sur mon réseau entreprise, je ne le récupère pas, pas même les groupes. Je pense que c'est probablement lié aux paramétrages spécifiques par les administrateurs (enfin je suppose).

    Chacune de vos réponses pour permis d'avancer et j'ai pu paufiner et terminer mon application. Je vous en remercie, et vous souhaite une bonne continuation à tous ;)

     

    Cyril


    Cyril
    dimanche 22 mai 2011 22:32