Aller au contenu


Script VBS avec Excel pour AD


5 réponses à ce sujet

#1 Hana

  • SUPINFO
  • 270 messages

Posté 03 août 2011 à 15:37

Bonjour à tous,

Je suis entrain de galérer depuis plusieurs jours à mon stage. J'essaie de créer un script en .vbs qui permette de créer des comptes depuis une feuille Excel.
Ca marche quand je mets l'OU de destination en "dure", mais quand j'essaie de définir l'OU de création de l'utilisateur en fonction de l'OU de destination inscrite dans Excel, ça ne marche plus.

Je suis dans un environnement de test et j'ai le droit de créer des users seulement dans une seule OU :-D



Voici mon script (j'ai utilisé les sources d'un certain Guy Thomas que j'ai trouvé en ligne car je n'ai jamais fait de script vbs auparavant).


CODE :


Option Explicit
Dim objRootLDAP, objContainer, objUser, objShell, objOU
Dim objExcel, objSpread, intRow
Dim strUser, strOU, strSheet
Dim strCN, strSam, strFirst, strLast, strPWD, strDisplayName, strUserUPN, strDescription, strOUser


strOU = "DC=branch,DC=lab,DC=ar*,DC=fr"
strSheet = "C:\Documents and Settings\Marion\Desktop\ScriptCreation\UserVersion2.xlsx"


'Lier vers AD le conteneur
Set objRootLDAP = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://" & strOU)

'Ouvre la feuille de calcul Excel
Set objExcel = CreateObject("Excel.Application")
Set objSpread = objExcel.Workbooks.Open(strSheet)
intRow = 3 'Car row 1 est souvent les titres



' Boucle création des comptes
Do Until objExcel.Cells(intRow,1).Value = ""
strOUser = (Trim(objExcel.Cells(intRow, 12).Value) & strOU)
strSam = Trim(objExcel.Cells(intRow, 1).Value)
strCN = Trim(objExcel.Cells(intRow, 3).Value)
strLast = Trim(objExcel.Cells(intRow, 5).Value)
strFirst = Trim(objExcel.Cells(intRow, 6).Value)
strPWD = Trim(objExcel.Cells(intRow, 11).Value)
strDisplayName = Trim(objExcel.cells(intRow, 4).value)
strUserUPN = Trim(objExcel.cells(intRow, 2).value)
strDescription = Trim(objExcel.cells(intRow, 7).value)

MsgBox strOUser 'pour vérifier que j'ai le bon chemin et c'est OK, la bulle s'affiche

' Build the actual User from data in strSheet.
Set objOU = GetObject("LDAP://" & strOUser) < ne fonctionne pas
Set objUser = objContainer.Create("User", "cn=" & strCN)
objUser.sAMAccountName = strSam
objUser.givenName = strFirst
objUser.sn = strLast
objUser.Description = strDescription
objUser.DisplayName = strDisplayName
objUser.UserPrincipalName = strUserUPN
objUser.SetInfo < bug à cette ligne là. Il me dit que je n'ai pas les droits alors que je pointe la création des users sur l'OU surlaquelle j'ai les droits de créations.

' Separate section to enable account with its password
objUser.userAccountControl = 512
objUser.pwdLastSet = 0
objUser.SetPassword strPWD
objUser.SetInfo
MsgBox strSam & "created"
intRow = intRow + 1
Loop
objExcel.Quit

WScript.Quit



Voilà... si vous avez des idées pour m'aider... J'ai plus ou moins compris tout le code que j'ai écrit (malgré quelque copié coller je l'avoue).

Est-ce que les droits me sont refusés parce que je chemine OU par OU et que du coup ya un endroit où il me refuse l'accès ?
Pour info l'erreur obtenu au lancement du script :

General access denied error
code : 80070005
Source : Active Directory

Merci :-)

P.S : On ne se moque pas si la réponse était toute simple ! J'ai pas mal cherché pour en arriver là déjà haha

Modifié par Hana, 03 août 2011 à 16:11.

B3 SUPINFO Paris - M1 SUPINFO Londres puis Paris SF
_2010-2011_____ 2011-2012

#2 Hana

  • SUPINFO
  • 270 messages

Posté 05 août 2011 à 11:08

C'est bon j'ai trouvé de l'aide, vous pouvez supprimer ce topic :-)
B3 SUPINFO Paris - M1 SUPINFO Londres puis Paris SF
_2010-2011_____ 2011-2012

#3 Proto

  • SUPINFO
  • 94 messages

Posté 05 août 2011 à 15:03

Supprimer ? tu ferais mieux de donner la solution, ça pourrait servir à d'autres ;).

#4 Hana

  • SUPINFO
  • 270 messages

Posté 05 août 2011 à 20:54

Voir le messageProto, le 05 août 2011 à 15:03, dit :

Supprimer ? tu ferais mieux de donner la solution, ça pourrait servir à d'autres ;).


Ok je ferai ça lundi ;)
B3 SUPINFO Paris - M1 SUPINFO Londres puis Paris SF
_2010-2011_____ 2011-2012

#5 matyou9

  • SUPINFO
  • 92 messages

Posté 08 août 2011 à 09:22

Ouai je suis bien intéressé par avoir la solution car j'ai un script du même genre à faire et tu m'aiderai grandement ^^

#6 Hana

  • SUPINFO
  • 270 messages

Posté 08 août 2011 à 14:48

Voici le script que j'ai utilisé pour désactivé des accounts AD selon un fichier excel.
A l'aide de VBEdit, j'ai trouvé des exemples. A l'aide d'un programmeur de la boite, j'ai réussi Excel.

Ce que ça donne :

' Disable a User Account
 
 
' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes
 
'Mes variables (apparemment pas oblig&#233; de les d&#233;clarer)
Dim strSheet
Dim intUAC        
Dim strSam, strDN
 
'Chemin vers le fichier Excel
strSheet = "C:\Documents and Settings\Marion\Desktop\ScriptCreation\UserVersion2.xlsx"
 
'D&#233;finition du domaine source
Set oRootDSE = GetObject("LDAP://RootDSE")
DomainDC = "branch"
 
'Open the Excel spreadsheet
Set objExcel = CreateObject("Excel.Application")
Set objSpread = objExcel.Workbooks.Open(strSheet)
intRow = 3 'Row 1 often contains headings
 
'Define connection to AD
set oConnection = CreateObject("ADODB.Connection")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"
 
'Utiliser les CN (Common Name -attention dans 1 seul domaine sinon risque de doublon-) dans Excel pour rechercher dans le LDAP d'AD
Do Until objExcel.Cells(intRow,1).Value = ""
strCN = Trim(objExcel.Cells(intRow, 1).Value)
 
'Requ&#234;te du LDAP pour obtenir des users correspondant au CN cherch&#233;.
'On donne le CN tir&#233; du Excel, on fait afficher le DN et le CN de l'user correspondant
strquery ="<LDAP://" & DomainDC & ".lab.ared.fr/DC=" &DomainDC & ",DC=lab,DC=ared,DC=fr>;(&(objectCategory=user)(cn="& strCN &"));distinguishedName,cn;subtree"  'la recherche est faite sur un DC sp&#233;cial, j'ai du forc&#233; le LDAP en mettant LDAP://IP/DC
wscript.echo strquery
Set oRecordset = oConnection.Execute(strQuery)
 
'Keep distinguishedName value
'Un oRecordset = une r&#233;ponse &#224; la recherche; on &#233;vite les erreurs en cas de non r&#233;ponse.
If Not oRecordset.EOF Then
While Not oRecordset.EOF
if not(isnull(oRecordset.Fields("distinguishedName"))) Then
dnName = oRecordset.Fields("distinguishedName")
wscript.echo oRecordset.Fields("distinguishedName")
UpdateAccount(dnName)  'fonction cr&#233;&#233;e ci-dessous
end if
oRecordset.movenext
Wend
End If
 
Set oRecordset = nothing
intRow = intRow + 1 'passe au CN suivant dans Excel pour une nouvelle recherche
Loop 'recommence la boucle
objExcel.Quit
'############################################################## FIN
 
 
Function UpdateAccount(dnName)
const ADS_UF_ACCOUNTDISABLE = 2
 
Set objUser = GetObject("LDAP://" & dnName)
 
'Disable account
intUAC = objUser.Get("userAccountControl")
objUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
wscript.echo strCN & " disabled"
 
'Mod Properties
objUser.Put "description", "Expire"
wscript.echo strCN & " mod"
 
'Move User
'objUser.MoveHere "LDAP://OU=Admin,OU=Users,OU=Paris,dc=branch,dc=lab,dc=ared,dc=fr", vbNullString 'cn=BarrAdam?
'wscript.echo strCN & " moved" 'ici j'ai un pb de droit d'OU alors je n'ai pu tester
 
'Save changes
objUser.SetInfo
 
wscript.echo strCN & ": changes done"
End Function
 


Si vous avez des questions je peux expliquer certains trucs

'Script de création d'utilisateur dans 1 seule OU (je n'ai pas réussi à spécifier un chemin)
'Ici je me suis beaucoup aidée de plusieurs sites web http://www.computerp...spreadsheet.htm



 
 
'UserSpreadsheet.vbs
'Sample VBScript to create User accounts from a spreadsheet
'Author Marion with Guy Thomas'sources
'Version 1
'----------------------------'
 
Option Explicit
Dim objRootLDAP, objContainer, objUser, objShell
Dim objExcel, objSpread, intRow
Dim strUser, strOU, strSheet
Dim strCN, strSam, strFirst, strLast, strPWD, strDisplayName, strUserUPN, strDescription
 
'OU o&#249; cr&#233;er les users
strOU = "OU=Admin,OU=Users,DC=branch,DC=lab,DC=ared,DC=fr"
strSheet = "C:\Documents and Settings\Marion\Desktop\ScriptCreation\CreationUser.xlsx"
 
'Bind to AD, user Container
Set objRootLDAP = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://" & strOU)
 
'Open the Excel spreadsheet
Set objExcel = CreateObject("Excel.Application")
Set objSpread = objExcel.Workbooks.Open(strSheet)
intRow = 3 'Row 1 often contains headings
 
' Here is the 'DO...Loop' that cycles through the cells
' Note intRow, x must correspond to the column in strSheet
Do Until objExcel.Cells(intRow,1).Value = ""
   strSam = Trim(objExcel.Cells(intRow, 1).Value)
   strCN = Trim(objExcel.Cells(intRow, 3).Value)
   strLast = Trim(objExcel.Cells(intRow, 5).Value)
   strFirst = Trim(objExcel.Cells(intRow, 6).Value)
   strPWD = Trim(objExcel.Cells(intRow, 11).Value)
   strDisplayName = Trim(objExcel.cells(intRow, 4).value)
   strUserUPN = Trim(objExcel.cells(intRow, 2).value)
   strDescription = Trim(objExcel.cells(intRow, 7).value)
 
' Build the actual User from data in strSheet.
   Set objUser = objContainer.Create("User", "cn=" & strCN)
   objUser.sAMAccountName = strSam
   objUser.givenName = strFirst
   objUser.sn = strLast
   objUser.Description = strDescription
   objUser.DisplayName = strDisplayName
   objUser.UserPrincipalName = strUserUPN
   objUser.SetInfo
 
' Separate section to enable account with its password
   objUser.userAccountControl = 512 '=account activ&#233;, si 514 d&#233;sactiv&#233; je crois
   objUser.pwdLastSet = 0
   objUser.SetPassword strPWD
   objUser.SetInfo
MsgBox strSam & "created"
intRow = intRow + 1
Loop
objExcel.Quit
 
WScript.Quit

*
Voilà, donc ça ne marche tjs pas de préciser le chemin :-D

Aide trouvée pour les scripts http://www.technos-s...mmation-40.aspx
http://base.faqexcha...display.vbs.txt

Modifié par Benji, 16 août 2011 à 22:15.
balise [CODE]

B3 SUPINFO Paris - M1 SUPINFO Londres puis Paris SF
_2010-2011_____ 2011-2012