memes python Accéder à Active Directory avec PythonPython-ldap est une API  permettant l’accès à votre annuaire LDAP avec un script Python. Rien de nouveau, c’est connu, mais c’est vraiment pratique et très puissant. L’objectif que je m’étais fixé était de pouvoir stocker dans une liste tous les membres d’un groupe de l’AD, sans doublon, et en détaillant les membres des groupes inclus dans groupes … Bref, tout bêtement du récursif. Si ça intéresse quelqu’un, qu’il le demande icon wink Accéder à Active Directory avec Python . Le script ci-dessous permet simplement d’afficher les informations d’un utilisateur. Une fois que vous avez ceci, vous pouvez tout faire très simplement, ça coule de source. A noter que j’ai utilisé python2.7 et python-ldap2.4.10.

# -*- coding: iso-8859-1 *-*
import ldap
 
ldap.set_option(ldap.OPT_REFERRALS, 0) # Nécessaire chez moi pour éviter le INVALID CREDENTIALS lors du binding
 
def search_by_samaccount(samaccount):
 con = ldap.initialize("ldap://MONDOMAIN:389") # Remplacez par votre domaine...
 con.simple_bind('MON_ID@MONDOMAIN','MON_PASSWORD')  # Username et password
 base_filter = 'DC=MON,DC=DOMAIN,DC=FR' # Le base filter, ici on cherche à partir de la racine
 search_filter = 'sAMAccountName='+samaccount # Le filtre de recherche
 search_attr = None # Le filtre d'attribut à récupérer. Par exemple, search_attr = ['displayName']. None = No filtre
 search_result = con.search_s(base_filter,ldap.SCOPE_SUBTREE,search_filter,search_attr)
 i = 0
 try:
  for i in range(len(search_result)-4): # Pour chaque personne trouvée, on affiche quelques infos
   print " \n *******************************************\n"
   #print search_result[i] pour afficher tous les attributs
   print search_result[i][1]['sAMAccountName']
   print search_result[i][1]['distinguishedName']
   print search_result[i][1]['displayName']
   print search_result[i][1]['memberOf']
   i = i + 1
 except TypeError,error:
  print error
 con.unbind() # Unbind de la connexion
 
if __name__ =='__main__':
 sam_input = raw_input("sAMAccountName please ? ")
 search_by_samaccount(sam_input)

(Lire la suite…)