Accueil > > > RÉCUPÉRATION DE DONNÉE DE L'ACTIVE DIRECTORY SOUS ACCESS
RÉCUPÉRATION DE DONNÉE DE L'ACTIVE DIRECTORY SOUS ACCESS
Information sur la source
Description
tout est dis dans le titre. De la récupération de donnée en plusieurs parties. Le language de programation sera le VBA. La base de donnée utilisée: AD et access2003.
Je préviens quand même que je suis novice en vba donc si j'y suis arrivé à force d'acharnement tout le monde peut le faire.
Dans cette première partie nous allons récupérer certaines informations utilisateurs.
Prérequis: Base de donnée access avec les tables déjà crée. une table lognames2, elle me permettra de récupérer les informations utilisateurs, avec 6 colonnes:
-logname
-nom
-prenom
-ou
-repperso
-log_fin_prev
une petite modification. On m'a fait remarquer que mes deux sources été sur le même sujet, et de les fusionner, ce que je vais faire.
donc la partie haute sera destiné aux utilisateurs et la partie basse va concernée les groupes de sécurité en général de l'active directory
Prérequis partie groupe: une table groupes2 avec comme colonne:
-Groupe
-DESIGN
dernière modification: à present on récupère aussi les droits utilisateurs
Prérequis droits: une table logname_groupe2 avec comme colonne:
-login
-app_gr
une maquette vous est proposez en zip.
je n'ai plus qu'a vous dire bonne lecture. n'hésitez pas à voter et/ou mettre un commentaire
Source
- Option Compare Database
- Option Explicit 'plante le programme si une variable n'est pas déclaré
- Sub activedir()
-
- 'Déclaration des variables
- Dim strScope As String, strAttrs As String, strFilter As String, strBase As String, strDomainDN As String
- Dim LDAP As String, group As String, login As String, nom As String, mbrf As String
- Dim prenom As String, validite As String, expi As String, org As String
- Dim tvar() As String
- Dim sql As String
- Dim mabd As Database
- Dim objconn As Object, objRS As Object, objuser As Object
- Dim member As Variant
-
- Set mabd = CurrentDb() 'mabd est la base de donnée dans laquel on travaille
-
- strDomainDN = "(le nom de votre domaine)"
- strBase = "<LDAP://" & strDomainDN & ">;" 'Définition de l'objet
- strFilter = "(&(objectclass=user)(objectcategory=person));" 'Filtre le jeu d'enregistrement afin de garder que les utilisateurs dans l'objet AD
- strAttrs = "distinguishedname;" 'Correspond à l'attribut de l'objet que l'on va regarder
- strScope = "subtree" 'On pourra rechercher les utilisateurs dans l'arborescence
-
- 'Connection à la base
- Set objconn = CreateObject("ADODB.Connection") 'Création d'un objet pour la connexion
- objconn.Provider = "ADsDSOObject" 'Définition du pilote de connexion
- objconn.Open "Active Directory Provider" 'Ouverture de la base
-
- 'Validation de la connexion
- Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
- objRS.MoveFirst 'Requête d'action sur la recherche.
-
- 'Suppression des données existante dans la base.
- sql = "delete * from lognames2"
- DoCmd.SetWarnings False 'Empêche les fenêtres de confirmation d'apparaitre
- DoCmd.RunSQL sql
- sql = "delete * from logname_groupe2"
- DoCmd.RunSQL sql
- sql = "delete * from groupes2"
- DoCmd.RunSQL sql
- DoCmd.SetWarnings True 'Réactive les fenêtres de confirmation
-
-
-
- Do Until objRS.EOF 'Tant que ce ne sera pas le dernier utilisateur trouver la boucle continue
- LDAP = (objRS.Fields(0).Value) 'Obtient le lien LDAP de l'objet trouver
- Set objuser = GetObject("LDAP://" & LDAP & "")
-
- 'Les propriétés recherchés de l'objet sont placer dans des variables
- login = (objuser.sAMAccountName)
- prenom = (objuser.givenName)
- nom = (objuser.sn)
- validite = Not (objuser.AccountDisabled)
- expi = objuser.AccountExpirationDate
-
- 'Travail dans les données récupérées
- tvar() = Split(LDAP, ",") 'on découpe la variable suivant les virgules et on place chaque morceau dans un tableau
- org = tvar(2) 'on prend la 3 ème case du tableau
- org = Mid(org, 4, Len(org)) ' on découpe les 4 premiers caratères et on place la valeur dans une variable
- If validite = "vrai" Then validite = 1 Else validite = 0 'conversion en donnée numérique
- org = Replace(org, "'", "''") 'on replace les simple quote par de simple quote double, simple quote = erreur
- prenom = Replace(prenom, "'", "''")
- nom = Replace(nom, "'", "''")
- login = Replace(login, "'", "''")
-
- member = objuser.memberof
- On Error Resume Next
- For Each member In objuser.memberof
- tvar() = Split(member, ",")
- mbrf = tvar(0)
- mbrf = Mid(mbrf, 4, Len(mbrf))
- mbrf = Replace(mbrf, "'", "''")
-
- 'Insertion des données dans la table logname_groupe2
- sql = "Insert Into logname_groupe2 Values('" & login & "','" & mbrf & "')"
- DoCmd.SetWarnings False
- DoCmd.RunSQL sql
- DoCmd.SetWarnings True
- Next
- 'Insertion des données dans la table lognames2
- sql = "Insert Into lognames2 Values('" & login & "','" & nom & "','" & prenom & "','" & org & "'," & validite & ",'" & expi & "')"
- DoCmd.SetWarnings False
- DoCmd.RunSQL sql
- DoCmd.SetWarnings True
- objRS.MoveNext
- Loop
-
- objRS.MoveFirst
-
- 'fin du script pour les utilisateurs et memberof
-
- strFilter = "(&(objectclass=group)(objectcategory=*));" 'Filtre le jeu d'enregistrement
- Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
- objRS.MoveFirst 'Requête d'action sur la recherche.
-
- 'lancement des recherches et récupération des données dans des variables
- Do Until objRS.EOF
- LDAP = (objRS.Fields(0).Value)
- Set objuser = GetObject("LDAP://" & LDAP & "")
- login = (objuser.sAMAccountName)
-
- tvar() = Split(LDAP, ",")
- org = tvar(2)
- org = Mid(org, 4, Len(org))
- org = Replace(org, "'", "''")
- login = Replace(login, "'", "''")
- If org = "groupe" Then org = "global"
-
- sql = "Insert Into groupes2 Values('" & login & "','" & org & "')"
- DoCmd.SetWarnings False
- DoCmd.RunSQL sql
- DoCmd.SetWarnings True
-
- objRS.MoveNext
- Loop
-
- 'fin du script pour les groupes
- mabd.Close
- Set objRS = Nothing
- Set objconn = Nothing
- End Sub
Option Compare Database
Option Explicit 'plante le programme si une variable n'est pas déclaré
Sub activedir()
'Déclaration des variables
Dim strScope As String, strAttrs As String, strFilter As String, strBase As String, strDomainDN As String
Dim LDAP As String, group As String, login As String, nom As String, mbrf As String
Dim prenom As String, validite As String, expi As String, org As String
Dim tvar() As String
Dim sql As String
Dim mabd As Database
Dim objconn As Object, objRS As Object, objuser As Object
Dim member As Variant
Set mabd = CurrentDb() 'mabd est la base de donnée dans laquel on travaille
strDomainDN = "(le nom de votre domaine)"
strBase = "<LDAP://" & strDomainDN & ">;" 'Définition de l'objet
strFilter = "(&(objectclass=user)(objectcategory=person));" 'Filtre le jeu d'enregistrement afin de garder que les utilisateurs dans l'objet AD
strAttrs = "distinguishedname;" 'Correspond à l'attribut de l'objet que l'on va regarder
strScope = "subtree" 'On pourra rechercher les utilisateurs dans l'arborescence
'Connection à la base
Set objconn = CreateObject("ADODB.Connection") 'Création d'un objet pour la connexion
objconn.Provider = "ADsDSOObject" 'Définition du pilote de connexion
objconn.Open "Active Directory Provider" 'Ouverture de la base
'Validation de la connexion
Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst 'Requête d'action sur la recherche.
'Suppression des données existante dans la base.
sql = "delete * from lognames2"
DoCmd.SetWarnings False 'Empêche les fenêtres de confirmation d'apparaitre
DoCmd.RunSQL sql
sql = "delete * from logname_groupe2"
DoCmd.RunSQL sql
sql = "delete * from groupes2"
DoCmd.RunSQL sql
DoCmd.SetWarnings True 'Réactive les fenêtres de confirmation
Do Until objRS.EOF 'Tant que ce ne sera pas le dernier utilisateur trouver la boucle continue
LDAP = (objRS.Fields(0).Value) 'Obtient le lien LDAP de l'objet trouver
Set objuser = GetObject("LDAP://" & LDAP & "")
'Les propriétés recherchés de l'objet sont placer dans des variables
login = (objuser.sAMAccountName)
prenom = (objuser.givenName)
nom = (objuser.sn)
validite = Not (objuser.AccountDisabled)
expi = objuser.AccountExpirationDate
'Travail dans les données récupérées
tvar() = Split(LDAP, ",") 'on découpe la variable suivant les virgules et on place chaque morceau dans un tableau
org = tvar(2) 'on prend la 3 ème case du tableau
org = Mid(org, 4, Len(org)) ' on découpe les 4 premiers caratères et on place la valeur dans une variable
If validite = "vrai" Then validite = 1 Else validite = 0 'conversion en donnée numérique
org = Replace(org, "'", "''") 'on replace les simple quote par de simple quote double, simple quote = erreur
prenom = Replace(prenom, "'", "''")
nom = Replace(nom, "'", "''")
login = Replace(login, "'", "''")
member = objuser.memberof
On Error Resume Next
For Each member In objuser.memberof
tvar() = Split(member, ",")
mbrf = tvar(0)
mbrf = Mid(mbrf, 4, Len(mbrf))
mbrf = Replace(mbrf, "'", "''")
'Insertion des données dans la table logname_groupe2
sql = "Insert Into logname_groupe2 Values('" & login & "','" & mbrf & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
Next
'Insertion des données dans la table lognames2
sql = "Insert Into lognames2 Values('" & login & "','" & nom & "','" & prenom & "','" & org & "'," & validite & ",'" & expi & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
objRS.MoveNext
Loop
objRS.MoveFirst
'fin du script pour les utilisateurs et memberof
strFilter = "(&(objectclass=group)(objectcategory=*));" 'Filtre le jeu d'enregistrement
Set objRS = objconn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst 'Requête d'action sur la recherche.
'lancement des recherches et récupération des données dans des variables
Do Until objRS.EOF
LDAP = (objRS.Fields(0).Value)
Set objuser = GetObject("LDAP://" & LDAP & "")
login = (objuser.sAMAccountName)
tvar() = Split(LDAP, ",")
org = tvar(2)
org = Mid(org, 4, Len(org))
org = Replace(org, "'", "''")
login = Replace(login, "'", "''")
If org = "groupe" Then org = "global"
sql = "Insert Into groupes2 Values('" & login & "','" & org & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
objRS.MoveNext
Loop
'fin du script pour les groupes
mabd.Close
Set objRS = Nothing
Set objconn = Nothing
End Sub
Conclusion
si vous avez des question n'hésitez pas. et votez pour moi \o/
Historique
- 10 septembre 2008 16:34:56 :
- regroupement des deux sources active directory: utilisateur et groupe de sécurité.
- 11 septembre 2008 14:08:14 :
- mise à jour. les droits(memberof) sont rajouté à la base
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Groupe d'utilisateurs access et VB, de l'aide svp [ par CDTThomas ]
Salut à tous !Voilà mon problème, j'ai besoin d'aller chercher le nom des membres d'un groupe d'utilisateurs access depuis VB. Seulement j'ai aucune i
Groupe de contrôle en access [ par Shirya ]
est il possible de créer des groupe de contrôle??comme par exemple, en vb, pour ne pas retaper le même code à chaque fois, on se faisait des groupe de
outlook lié à access + groupe de diffusion [ par benjy54 ]
bonjour je suis en stage et voici ce qu'on me demande,voici mon probleme : je dispose d'une base de données ACCESS , dans cette base contient des
index et groupe de controle sur access [ par supergizmo ]
bonjours a tousje n'arrive pas à créer des groupes de controle(même en faisant des copier/coller), ni à créer des index (ils ne sont pas présents dans
Groupe de contrôle sous VBA (Access) POSSIBLE??? [ par Cink ]
Bonjours,Comme mon titre le dit si bien, j'aimerais savoir il y a une façon de créer l'équivalent des groupes de contrôles VB mais en VBA, sous Access
Sécurité Access [ par gloups ]
Bonjour à tous,A partir d'une appli Access (2000) connectée au groupe de travail par défaut system.mdw, j'aurai besoin, via VBA, d'ouvrir une nouvelle
groupe de controles avec access et vba [ par stephG01 ]
sur une form j'ai 14 zone de textes que j'ai groupé , pensant pouvoir utiliser une boucle pour les affichages ou les remise a zero des controles. mais
[VBA Access] groupe d'option ou de cases à cocher [ par observatoire ]
Bonjour,Je souhaite définir si mon groupe d'option est activé (au moins une option cochée) ou non (aucune option cochée, avec les cases en grisé).Merc
VBS Ajouter un "Contact" AD dans un groupe [ par lordvenom ]
Bonsoir à tous,Après une longue recherche sur le forum je n'ai rien trouvé à ce sujet alors je me décide.
Ribbon Access 2007 et gestion de droits AD [ par Djodu69 ]
Bonjour,Je suis en train de bâtir une application sur Access 2007, et je me sers des propriétés du Ribbon pour faire un menu personnalisé.En parallèle
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|