Création de compte Active Directory via Excel
Par Romain Tiennot le jeudi 2 juin 2011, 21:07 - Autoit - Lien permanent
Voici un petit script permettant de créer des comptes Active Directory avec un fichier Excel. Dans mon exemple, je renseigne simplement le nom, prénom et service du futur utilisateur. Le script aura comme fonction de :
- Verifier la presence du fichier excel
- Verifier que toute les cellules "Nom" soient saisie
- Verifier que toute les cellules "Prenom" soient saisie
- Verifier que toute les cellules "Service" soient saisie
- Verifier que la somme de "Nom" et "Prenom" soit inferieur à 20 caractère
Une fois les checks validé, la création du compte peux commercer :
- Création du compte
- Renseigne dans la description le nom
- Renseigne dans la description le prenom
- Renseigne le nom complet
- Renseigne le chemin du profils
- Rajoute dans le groupe du service
- Génère le mot de passe
- Active le changement de mot passe à la premiere ouverture de session
- Ajoute une restriction d'horaire d'ouverture de session pour certain groupe
J'ai créé le script sous Autoit qui utilise la fonction "AD" disponible ICI : Voici le code :
#include <Excel.au3> #include <AD.au3> $fichier = @ScriptDir & "\comptead.xls" $fin = 0 ;~ verification de la présence du fichier excel If not FileExists(@ScriptDir&"\comptead.xls") = 1 Then msgbox(64,"ERREUR","Le fichier comptead.xls n'est pas présent dans "&@ScriptDir) exit Else ;~ Ferme Excel ProcessClose("Excel.exe") ;~ Ouvre le fichier excel _ExcelBookOpen($fichier) $oExcel = ObjGet("","Excel.Application") $oExcel.SheetsInNewWorkbook = 1 ;~ Cache le fichier excel $oExcel.Visible = 0 ;~ Compte le nombre de ligne $nb_ligne = $oExcel.ActiveSheet.UsedRange.Rows.Count ;~ Début de la verification des lignes for $i = 1 to $nb_ligne-1 step 1 ;~ Création de la variable "nom" présent dans la premiere colonne $nom = $oExcel.Activesheet.Cells(1+$i,1).Value ;~ Création de la variable "prenom" présent dans la deuxieme colonne $prenom = $oExcel.Activesheet.Cells(1+$i,2).Value ;~ Création de la variable "fonction" présent dans la troisieme colonne $fonction = $oExcel.Activesheet.Cells(1+$i,3).Value ;~ Création de la variable "cb" qui compte le nom de caratère nom + prenom $cb = stringlen($nom)+stringlen($prenom) ;~ Si aucun nom n'est saisie dans la colonne "nom" alors message d'erreur if not $nom = true then msgbox(0,"Erreur Nom "," La cellule "&$i+1& " est vide dans la colonne nom") exit ;~ Si aucun prenom n'est saisie dans la colonne "prenom" alors message d'erreur elseif not $prenom = true Then msgbox(0,"Erreur Prenom","La cellule "&$i+1& " est vide dans la colonne prenom") Exit ;~ Si l'addition du prenom et nom egal ou superieur à 20 caratère alors erreur elseif $cb >= 20 Then msgbox(0,"Erreur Caractère","Ligne "&$i+1&", l'identifiant "&$prenom&" "&$nom&" est > ou = à 20 caractères : "& $cb) exit EndIf ;~ Si dans la colonne fonction, les champs saisie n'egal pas "Direction" ou "Administration" ou "Prodution1" ou "Production2" ou "Informatique" alors erreur if not (($fonction = "Direction") or ($fonction = "Administration") or ($fonction = "Production 1") or ($fonction = "Production 2") or ($fonction = "Informatique")) Then msgbox(0,"Erreur Service","La cellule "&$i+1& " n'est saisie correctement dans la colonne service") exit endif Next ;~ En fonction de la fonction, les variables sont generé comme l'UPN, le nom complet, son OU et le GROUPE for $i = 1 to $nb_ligne-1 step 1 $nom = $oExcel.Activesheet.Cells(1+$i,1).Value $prenom = $oExcel.Activesheet.Cells(1+$i,2).Value $fonction = $oExcel.Activesheet.Cells(1+$i,3).Value $ncomplet = $prenom&" "&$nom $upn = StringReplace($prenom&"."&$nom," ","") if $fonction = "Direction" Then $ou = 'OU=Utilisateurs,OU=Service Direction,DC=drinkevol,DC=lan' $groupe = 'CN=Direction,'&$ou desc() elseif $fonction = "Administration" Then $ou = 'OU=Utilisateurs,OU=Service Administratif,DC=drinkevol,DC=lan' $groupe = 'CN=Administration,'&$ou desc() elseif $fonction = "Informatique" Then $ou = 'OU=Utilisateurs,OU=Service Informatique,DC=drinkevol,DC=lan' $groupe = 'CN=Technique,'&$ou desc() elseif $fonction = "Production 1" Then $ou = 'OU=Utilisateurs,OU=Production 1,OU=Service Production,DC=drinkevol,DC=lan' $groupe = 'CN=Production1,'&$ou desc() elseif $fonction = "Production 2" Then $ou = 'OU=Utilisateurs,OU=Production 2,OU=Service Production,DC=drinkevol,DC=lan' $groupe = 'CN=Production2,'&$ou desc() EndIf func desc() _AD_Open() ;~ Création de l'utilisateur $iValue = _AD_CreateUser($ou, $upn, $ncomplet) ;~ Si c'est reussi alors If $iValue = 1 Then $fin = $fin + 1 MsgBox(64, "Création du compte de '"&$ncomplet&"'", "L'utilisateur '" & $ncomplet & "' a été crée avec succés est dans l'OU '" & $ou,1) ;~ $iValue = _AD_ModifyAttribute($sUser, "description", "Description") ;~ $iValue = _AD_ModifyAttribute($sUser, "mail", "email") ;~ On ecrit dans le champs "Prenom" $iValue = _AD_ModifyAttribute($upn, "givenName", $prenom) ;~ On ecrit dans le champs "Nom" $iValue = _AD_ModifyAttribute($upn, "sn", $nom) ;~ On créé le nom d'affichage $iValue = _AD_ModifyAttribute($upn, "displayName", $ncomplet) ;~ On indique le chemin du profils $iValue = _AD_ModifyAttribute($upn, "profilepath", "\\drinkevol.lan\Profils\"&$upn) ;~ On l'ajoute dans le groupe $iValue = _AD_AddUserToGroup($groupe, $upn) ;~ On genere son mot de passe $iValue = _AD_SetPassword($upn, StringUpper(StringLeft($prenom, 1))&StringLower(StringLeft($nom, 1))&"123456") ;~ On active le changement de mot de passe Run(@ComSpec & " /c " & 'dsmod user "CN='& $ncomplet &","& $ou &'" -mustchpwd yes', "", @SW_HIDE) ;~ En fonction de son groupe, on active une restriction de connexion if $fonction = "Production 1" or $fonction = "Production 2" or $fonction = "Administration" Then Run(@ComSpec & " /c " & 'net user '&$upn&' /Domain /time:L,07:00-20:00;Ma,07:00-20:00;Me,07:00-20:00;J,07:00-20:00;V,07:00-20:00;S,07:00-20:00;D,07:00-20:00', "", @SW_HIDE) EndIf ;~ si l'erreur = 1 alors le compte existe deja ElseIf @error = 1 Then MsgBox(64, "Création du compte de '"&$ncomplet&"'", "L'utilisateur '" & $ncomplet & "' est déja existant",1) ;~ ElseIf @error = 2 Then ;~ MsgBox(64, "Création du compte de '"&$ncomplet&"'", "OU '" & $ou & "' does not exist") ;~ ElseIf @error = 3 Then ;~ MsgBox(64, "Création du compte de '"&$ncomplet&"'", "Value for CN (e.g. Lastname Firstname) is missing") ;~ ElseIf @error = 4 Then ;~ MsgBox(64, "Création du compte de '"&$ncomplet&"'", "Value for $sAD_User is missing") Else MsgBox(64, "Création du compte de '"&$ncomplet&"'", "Retour code erreur '" & @error & "' venant de l'Active Directory") EndIf _AD_Close() endfunc Next EndIf ;~ Ferme le fichier excel ProcessClose("Excel.exe") ;~ Affiche un petit rapport msgbox(0,"Fin","La création est terminée avec "&$fin&" compte(s) créé(s)",2)
Et comme toujours, la petite video montrant le tout :
Il y a 8 commentaires
Je viens d'essayer le script mais en l'exécutant ça me retourne le code erreur '2' venant d'Active directory. Comment trouver les explications sur la signification de ces codes?
Merci,
Bonjour,
L'erreur 2 correspond "l'OU n'existe pas" :
If$iValue=1Then
MsgBox(64,"Active Directory Functions - Example 1","User '"&$sUser&"' in OU '"&$sOU&"' successfully created")
ElseIf@error=1Then
MsgBox(64,"Active Directory Functions - Example 1","User '"&$sUser&"' already exists")
ElseIf@error=2Then
MsgBox(64,"Active Directory Functions - Example 1","OU '"&$sOU&"' does not exist")
ElseIf@error=3Then
MsgBox(64,"Active Directory Functions - Example 1","Value for CN (e.g. Lastname Firstname) is missing")
ElseIf@error=4Then
MsgBox(64,"Active Directory Functions - Example 1","Value for $sAD_User is missing")
Else
MsgBox(64,"Active Directory Functions - Example 1","Return code '"&@error&"' from Active Directory")
EndIf
Romain
Salut Romain,
Je suis touché par ta disponibilité et merci beaucoup parce que finalement j'ai pu faire marcher le script avec ton code.
Je pourrais modifier le code et ajouter plus d'information? (email, téléphone, etc;)?
Encore une fois merci,
Jean-Pierre
C'est simplement un exemple et en fonction des situations, il peut être modifié.
A bientôt,
Romain
Bonsoir,
J'ai eu un soucis pour trouver les véritables noms de variables AD telles que "giveName", "sn", etc.
Peux-tu m'indiquer où les trouver s'il te plaît?
En te remerciant encore.
Jean-Pierre
Bonjour,
Sur ton contrôleur de domaine, tu dois avoir l'outil ADSI (adsiedit.msc). Il permet d’éditer l'active directory.
Tu peux voir l'ensemble des attribues des utilisateurs :
Romain
scripte ne marche pas comme dons le video
erreur service
la cellule 2 n'est saisie correctemment dans la colonne service
Comment trouver les explications de ce msg
La puissance du PowerShell ^^
Merci Romain, je vais m'en inspirer un peu !