EXPORT D'UTILISATEURS ACTIVE DIRECTORY DANS UN FICHIER EXCEL

cs_shakaka Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 janvier 2008 - 9 janv. 2008 à 17:41
 Lund - 4 mars 2014 à 14:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42337-export-d-utilisateurs-active-directory-dans-un-fichier-excel

Pour ceux qui voudrait utiliser ce script avec office 2013 sur leur poste :

Dans le script : changer .xls en .xlsx
Pour le fichier à creer Source.xlsx, attention à la casse (MAJ min)
Pour changer les attributs, reportez vous dans votre ad dans propriété d'un utilisateur, éditeurs d'attributs.
Xhar972 Messages postés 2 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
12 déc. 2011 à 22:05
Bonjour,

DSL pour n'arriver que maintenant.
Le script est Génial. En essayant de faire un complément, j'aimerai pouvoir extraire les comptes qui ont expiré.
je rajoute en fin d'extraction cette ligne mais rien ne monte dans le fichier Excel.
"objExcel.ActiveSheet.Range("N" & i).Value = objUser.accountExpires"

C'est la bonne syntaxe ?

Merci pour la réponse d'avance

Gérald.
typhon24 Messages postés 13 Date d'inscription vendredi 3 mars 2006 Statut Membre Dernière intervention 19 septembre 2011 3
19 sept. 2011 à 14:22
Merci bien
Etinewok Messages postés 5 Date d'inscription jeudi 21 avril 2011 Statut Membre Dernière intervention 11 octobre 2011
21 avril 2011 à 11:24
Bonjour,
Tout d'abord merci pour ce script !
J'ai tout de même un petit problème. Je veux lister aussi les valeurs de l'attribut accountExpires et dans le fichier Excel je n'ai aucune valeur de cet attribut.
J'ai repris à l'identique le code source que tu as donné et j'ai listé les mêmes attributs. Pour l'attribut displayName, pareil, je n'ai aucune valeur dans la tableau, alors que je sais pourtant que mes utilisateurs ont ce champ rempli.
Comment cela se fait-il ?
cs_linko75 Messages postés 2 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 7 janvier 2011
7 janv. 2011 à 15:43
c'est bon j'ai trouvé
par contre, il geenre un fichier txt mais je n'ai pas tout les attributs. juste recuper le nom et prénom
pas compris l'interet du fichier exel
help
cs_linko75 Messages postés 2 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 7 janvier 2011
7 janv. 2011 à 13:42
je dois etre nul mais je n'y arrive pas
mon domaine est groupe.nom demasociété.fr
j'ai donc mis dc=groupe,dc=nom de ma société, dc=fr

OU en question est Users
j'ai bien le repertoire de d:temp de crée et le fichier source.xls
ad en 2003
quand je lancer le vbs, je mets users sur le 1er fenetre
ensuite dans le fichier temporaire, je mets c:\temp
merci
Alicodom Messages postés 1 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 26 octobre 2010
26 oct. 2010 à 13:40
salut aurais tu un excemple pour la creation du fichier excel sources.xls avec les colonnes . je recupere seulement dans mon fichier txt les champs suivants :

CN=Stephane Kouam,OU=Users,OU=FR-Paris,OU=CWE_UK,DC=alico,DC=corp

Merci
indypat Messages postés 1 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 27 août 2010
27 août 2010 à 11:26
bonjour
j'ai une question bete (surement :)) mais lorsque dans votre active directory vous avez plusieurs OU, peut on faire un export complet de chaque utilisateur sans avoir a passer sur chaque OU ??

merci urgent
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
21 avril 2010 à 15:55
Bonjour,
Désolé pour le retard, mais j’ai rejoué le script dans un nouvelle environnement et j’ai constaté que si le script n’était pas exécuté en local sur votre contrôleur de domaine « celui de test bien sûr » alors il faut renseigner le nom du serveur à interroger :

Voici la commande de ce script
strBase = "<LDAP://" & strDomainDN & ">;"

Voici la nouvelle commande (remplacer NomDuServeurLDAP par DC)
strBase = "<LDAP://NomDuServeurLDAP/" & strDomainDN & ">;"

Ci-joint l’article Microsoft
http://support.microsoft.com/kb/187529
Voilà j’espère que cela répondra à votre pb.
kenji_lol Messages postés 8 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 14 avril 2010
14 avril 2010 à 17:52
Bonjour moi j'ai exactement la même erreur que Troy34
Et j'aimerais bien avoir la réponse car ce script est très intéressant

Merci.
Troy34 Messages postés 4 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 13 août 2009
7 août 2009 à 10:13
Bonjour tout le monde :),

Je fais actuellement un script en VBS chargé d'interroger Active Directory et vu que le script de DFORLER utilise la même série d'instructions et vu que je rencontre le même problème que Natio et Fouinas je poste aussi ici :).



strBase = "<LDAP://" & strDomainDN & ">;"
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "distinguishedname;"
strScope = "subtree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"

set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
MyFile.WriteLine (objRS.Fields(0).Value)
objRS.MoveNext
wend
MyFile.close



La ligne de code "set objRS objConn.Execute(strBase & strFilter & strAttrs & strScope)" me renvoie l'erreur suivante> Le tableau n'existe pas.

Je renseigne les bonnes informations au niveau du strDomain puisque j'ai fais le test d'interroger mon Active Directory avec une requête du type SQL (SELECT attribut FROM strdomain WHERE champ='qqch') et là ca marche.

L'erreur "Le tableau n'existe pas" ne m'est retournée que lorsque j'utilise l'accès à mon Active Directory à l'aide du filtre (strFilter).

Est ce que quelqu'un aurait une piste à suivre pour solutionner mon problème s'il vous plait ? ... Parce que là ca fait trois jours que je cherche une solution que je ne trouve pas :s.

D'avance, Merci pour vos réponses :).
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
27 mars 2009 à 21:03
désolé pour t'avoir demandé de valider les champs LDAP mais tu sais on ne connait pas toujours le niveau de son interlocuteur.

Et si tu remplace par ca, quesque ca donne ?

strFilter = "(&(objectclass=user)(objectcategory=person)" & _
"(useraccountcontrol:1.2.840.113556.1.4.803:=2));"
strAttrs = "name;"
strScope = "subtree"
cs_natio Messages postés 2 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 27 mars 2009
27 mars 2009 à 09:41
Donc je viens au rapport, j'ai bien dl les Admin tools, install etc...
je tape donc la commande que tu m'as donné qui me confirme que depuis le début les informations que je rentrais étaient...correctes.
J'ai quand même essayé de remplacer comme tu me l'as indiqué :
strDomainDN ="OU=MonOU,DC=microsoft,DC=com"

Mais rien n'y fait.
Je t'explique, il me créé bien le fichier texte, mais il n'écrit pas dedans.
J'ai une erreur ligne 33 du script, soit:

' Ici lancement de la requêtes et écriture dans le fichier txt dans le c:\temp
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
MyFile.WriteLine (objRS.Fields(0).Value)
objRS.MoveNext
wend
MyFile.close

Au moment de la requête et de l'écriture...
Aussi j'ai un AD installé sur Windows Serveur 2008... Peut être que c'est cela qui pose problème.
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
26 mars 2009 à 20:59
J'ai oublié, mais l’info précédente est pour l'ajouter dans la ligne 11 soit :

strDomainDN ="ou=" & stroucible & ",dc=VotreNomdeDomaine,dc=SonExtention"

Tu peux soit remplacer le tout par

strDomainDN ="OU=MonOU,DC=microsoft,DC=com"

Soit par
strDomainDN ="ou=" & stroucible & ",DC=microsoft,DC=com"
Et dans le inputbox renseigner le nom MONOU

Si nous suivons la logique des commentaires du message d'avant bien sur
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
26 mars 2009 à 20:53
Bonjour a toi aussi,

Je ne sais pas si tu as le même problème mais en revanche je sais que tu peux tester un petit truc pour vérifier si il vient d’ici.

Tu télécharges et installes les Admin tools du site www.microsoft.com puis dans une commande dos tu tapes la commande suivante :
Dsquery user –name *TonNomDeConnexionAD*
Il devrait te répondre un truc dans ce style
CN=MonNomAMoi,OU=MonOU,DC=microsoft,DC=com
Puis tu fais un copié collé de la syntaxe depuis le OU=MonOU,DC=microsoft,DC=com
Et normalement cela devrait être bon.

Bon courage et merci pour ton retour si cela marché
cs_natio Messages postés 2 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 27 mars 2009
26 mars 2009 à 15:14
Hello!
1) Merci pour ce script qui pourrait m'être fort utile
2) Si j'arrive à le faire fonctionner =)

Car j'ai la même erreur (celle du tableau qui n'existe pas).
J'ai pourtant bien renseigné le nom LDAP du domaine, créé le fichier Source.xls dans C:\ et pourtant... Aurai-je oublié autre chose?
Merci encore
fouinas Messages postés 2 Date d'inscription mercredi 10 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
11 déc. 2008 à 17:51
Merci DFORLER,

Je vais essayer ça. Mais il me semble que c'est ce que j'ai fait.

@+
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
10 déc. 2008 à 20:51
Bonjour FOUINAS, je viens de voir que le commentaire était en ligne.

Donc voici je pense le début de ton problème la ligne 33 est l'appel à ton active directory Donc il faut que tu renseignes correctement l'extension de ton domaine

---Dans le script ----
' Attention à modifier le nom LDAP du domaine
strDomainDN ="ou=" & stroucible & ",dc=VotreNomdeDomaine,dc=SonExtention"

Exemple :
dc=microsoft,dc=com (soit un domaine AD = microsoft.com)
Puis la variable stroucible elle t'es demandé dans l'imputbox la tu marques une de tes OU de l'AD (Attention du dois avoir les droits de lecture de l'AD pour ça un simple compte utilisateurs et nécessaire)
fouinas Messages postés 2 Date d'inscription mercredi 10 décembre 2008 Statut Membre Dernière intervention 11 décembre 2008
10 déc. 2008 à 10:30
Bonjour,

J'ai un petit problème avec le script. Une erreur ligne 33 : 'la tableau n'existe pas'.

Quelqu'un voit le problème. Merci.
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
27 oct. 2008 à 20:08
Normalement du devrais pouvoir le récupérer telephoneNumber puisqu'il semble être le bon. Sinon pour le nom des champs tu peux tester adsiedit.msc ou ldapAdmin (en download) si tu ne connais pas dans les détails des attributs tu pourras liter leurs noms LDAP.
Normalement pour le profil c'est "profilePath".

As tu vérifié que tu renseignais bien les colonne Excel ?
vilo35 Messages postés 1 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 27 octobre 2008
27 oct. 2008 à 09:09
salut
pour ma part je n'arrive pas a recup certain champs (telephoneNumber) et je voudrais recuperer le chemin du profile itinérant
si vous pouvez me renseignez merci
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
19 oct. 2008 à 10:02
Bonjour Mak09,

As tu bien pensé à créer le fichier source Excel en ligne 47 ?
'Attention le fichier C:\sources.xls doit exister
strSheet = "c:\Source.xls"
J'ai utilisé une model pour pouvoir reinsegner la première ligne tu sais exemple (col1 nom, col2 prenon, ....)

Si non, je pense que tu as bien excel d'installé sur ton poste ?
mak09 Messages postés 1 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 19 octobre 2008
19 oct. 2008 à 09:07
Bonjour
Le script marche, juste pour générer le fichier txt, mais pour exporter vers le fichier excel il marche pas!!! à l'aide
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
26 juin 2008 à 20:21
pas de quoi si il peut être utile c'est un plaisir.
starneo Messages postés 1 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 25 juin 2008
25 juin 2008 à 12:31
Je te remercie beaucoup pour ton script !
hoangquang Messages postés 1 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 17 mars 2008
17 mars 2008 à 16:14
Pour les non initiés du LDAP : une notion importante de l'annuaire LDAP est son DIT (Directory Information Tree). Pour savoir ce qu'il faut renseigner au niveau du code ci-dessus et les paramètres du programme, il faut que vous connaissiez votre DIT : domaine dc=yahoo,dc=com et vos OU=people ou encore OU=groups ou encore OU=computers etc...
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
10 janv. 2008 à 19:24
Slt,

Pour ma part j’ai eu à changer ce paramètre dans le cadre d’un méta annuaire (d’où ma connaissance de celui-ci). Mais je conseil quand même de ne pas trop l’augmenter car si tu as des applications qui requêtent votre AD alors tu risque de surconsommer des ressources surtout si tu es déjà un peux juste à ce niveau. Pour info moi j’étais passé de 1000 vers 2000 et je n’ai pas constaté de changement donc tu pourrais "je pense" sans pb passer à 3000 ou 4000…

Toutefois je te conseil, si tu en a la possibilité. De cibler des OU plus petites (une simple modification du script pour récupérer la liste de sous OU de ton OU principale ou simplement une liste fixe générée par l’outil Windows "" dsquery ou –name * "" ) te permettrait de récupérer toutes les informations que tu as besoin mais par petits lots. Il te faudrait bien sur rajouter une boucle pour lire toutes les OU dans l’ordre.

Voila en espérant que cela t’aide ? ;-)
cs_shakaka Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 janvier 2008
10 janv. 2008 à 18:00
Coucou,
Effectivement j'ai fait un ntdsutil.exe et j'ai constaté que le MaxPageSize avait la valeur 2500.
(MaxPageSize=Cette valeur contrôle le nombre maximal d'objets retournés dans un résultat de recherche. Ce nombre est indépendant de la taille des objets retournés. Pour exécuter une recherche dont le résultat est susceptible de dépasser ce nombre d'objets, le client doit spécifier un contrôle de recherche paginée. Ainsi, les résultats retournés seront répartis dans des groupes ne dépassant pas la valeur définie pour MaxPageSize. En résumé, MaxPageSize contrôle le nombre d'objets retournés dans un même résultat de recherche.)

Ceci explique cela. N'etant pas admin des DCs de ma boite je n'ose pas changer cette valeur. Crois-tu que cela peut-être néfaste (de changer la valeur ?).
Cdlt,
DFORLER Messages postés 14 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2010
9 janv. 2008 à 19:40
Bonjour à toi aussi et merci pour ton compliment.

En revanche pour les 2500 lignes normalement ce n'est pas lié au script. Je pense à la configuration de ton active directory, puisque tu peux augmenter le nombre de retour sur une requête LDAP (par défaut des blocs de 1000 lignes sont renvoyés, et comme tu pointe une OU complète, Peut être que …), moi mon AD à 15000 comptes et je ne me rappel pas ce type de PB (bien que je ciblais OU par OU mais je suis presque sur qu'il y avait plus de 2500 comptes dans l’OU que je récupérais).

Si non une autre possibilité est que tu as un compte avec des caractères qu'il ne comprend pas. Dans ce cas tu peux ajouter une remarque à ON ERROR RESUME NEXT et rajouter une boucle de contrôle if (avec un compteur par exemple et surtout un msgbox du champ) dans la boucle Do Until userliste entre chaque instructions d'écritures et tu pourras vérifier si c’est une limitation du script dans ta configuration ou une erreur du champ que tu récupère.

Demain je ferais un test pour vérifier si je suis bloqué à 2500 lignes
Dans l'attente de ton retour bon courage
cs_shakaka Messages postés 8 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 janvier 2008
9 janv. 2008 à 17:41
Salut,
Je viens de tester ton script et je le trouve niquel pour ce que je voulais faire ^^ (avoir la liste des objets Users en fonction de leur date de creation): J'ai donc modifié un des attributs dans le script par "WhenCreated". Bref, par contre j'ai noté un petit souci il me semble. J'ai remarqué que a chaque fois le fichier Excel s'arrete a 2500 lignes, dans le cas de ma société il manque donc une partie des objets User (plus de 2500 :D).
Aurais-tu une solution à proposer ?
Merci à toi.
Rejoignez-nous