Export d'utilisateurs active directory dans un fichier excel

Soyez le premier à donner votre avis sur cette source.

Vue 64 594 fois - Téléchargée 3 199 fois

Description

Bonjour, Voici un nouveau script toujours axè utilisateurs Active Directory.

Je sais qu? il existe des Outils pour faire quelque chose de similaire mais bon moi je ne voulais que certains attributs LDAP et puis l? exercice est toujours sympa à réaliser.

Le but du script est : Depuis une INPUTBOX (ou vous renseignerez le nom de votre OU) d? extraire l ensemble des comptes et leurs attributs (la liste est fixe mais vous pouvez en ajouter ou en retirer facilement)

J? espère qu?il est suffisamment commenté pour vous permettre de l ?utiliser ou de l? améliorer à votre bonne guise.

Voila merci (pensé à la petite notes si vous aimé ou utilisé !!!)

Source / Exemple :


' ------ SCRIPT d'export d'utilisateurs depuis une OU 			------
' ------ Le domaine AD est a jouter en fixe dans le 			------
' ------ String StrDomainDN pour des raisons d'utilisations courantes	------

dim fso, MyFile, reptemp, filetext

Stroucible=inputbox("renseigner le nom de l'ou cible : ")

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

' Attention le répertoire c:\temp doit exister
reptemp="c:\temp\"

Filetext=Inputbox("fichier temporaire de l'OU cible : ")
Set fso = CreateObject("Scripting.FileSystemObject")

' création d'un fichier txt pour la première partie du script, soit le nom des utilisateurs
set MyFile = fso.CreateTextFile(reptemp + filetext + ".txt")

' Ici un filtre sur les utilisateurs et je récupére leur Distinguishedname
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"

' 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

' Maintenant avec le fichier txt je récupère les informations utilisateurs par utilisateurs
on error resume next
Dim objConnection, objRecords, objExcel, strQuery, i, objSpread, intRow

'Attention le fichier C:\sources.xls doit exister
strSheet = "c:\Source.xls"

Set objExcel = CreateObject("Excel.Application")
Set objSpread = objExcel.Workbooks.Open(strSheet)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set UserListe = objFSO.OpenTextFile(reptemp + Filetext + ".txt")

'Renseigner le numéro de la première ligne Excel ou vous souhaité écrire les inforamations
i = 2

  ' liste des attributs à récupérer
  Do Until UserListe.AtEndofStream
	UserLDAP = UserListe.Readline
	Set objUser = GetObject("LDAP://" & UserLDAP & "")
		CNStr = left(UserLDAP, Instr (UserLDAP, ",") -1)
		OuStr = Right(UserLDAP, len(UserLDAP) - Instr (UserLDAP, ","))
		objExcel.ActiveSheet.Range("A" & i).Value = CNStr
		objExcel.ActiveSheet.Range("B" & i).Value = OuStr
		objExcel.ActiveSheet.Range("C" & i).Value = objUser.givenName
		objExcel.ActiveSheet.Range("D" & i).Value = objUser.initials
		objExcel.ActiveSheet.Range("E" & i).Value = objUser.sn
		objExcel.ActiveSheet.Range("F" & i).Value = objUser.displayName	
		objExcel.ActiveSheet.Range("G" & i).Value = objUser.userPrincipalName
		objExcel.ActiveSheet.Range("H" & i).Value = objUser.SamaccountName
		objExcel.ActiveSheet.Range("I" & i).Value = objUser.mail
		objExcel.ActiveSheet.Range("J" & i).Value = objUser.physicalDeliveryOfficeName
		objExcel.ActiveSheet.Range("K" & i).Value = objUser.telephoneNumber
		objExcel.ActiveSheet.Range("L" & i).Value = objUser.Description

		i = i + 1
  loop

'Sauvegarde du fichier Excel
objExcel.ActiveWorkbook.SaveAs(reptemp + Filetext + ".xls")
objExcel.ActiveWorkbook.Close
objExcel.Workbooks.Close

msgbox "fin de récupération des utilisateurs. Le fichiers excel est dans " + reptemp + Filetext + ".xls"
objExcel.Quit

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_shakaka
Messages postés
8
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
10 janvier 2008

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.
DFORLER
Messages postés
14
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
21 avril 2010

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

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

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 ? ;-)
hoangquang
Messages postés
1
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
17 mars 2008

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...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.