cs_idji
Messages postés
1
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2008
21 févr. 2008 à 12:21
Pascal
Petit script que j'utilise pour créer mes comptes avec mon logiciel CERBERE AD.
' Déclaration des variables dont nous avons besoin
Dim i,Rfs,fs,FichierInfoClient,FichierResultat,InfoClient,FicPassWord,oFSO,oTS
Dim DomaiPath
Dim DomainName
Dim Domain
Dim NomOU,ClasseGroupe
Dim Description
Dim NomClient,NomCompletClient
Dim LoginClient
Dim PassWordClient
Dim PrenomClient
Dim DescriptionClient
Dim Groupe,strUAC,strProfilePath,strScriptPath
Dim GroupeAdmin, NomOUAdmin
Dim CheminFichierResultat,UNCClient,LecteurReseauClient,LecteurResau
Dim objACE,objDACL,objSD,arrTrustees
Const ADS_UF_ACCOUNTDISABLE = 2 ' le compte ne peut etre desactive
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000 ' Mot de passse n'expire jamais
Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6 ' Ne peut pas changer de mot de passe
Const ADS_ACEFLAG_OBJECT_TYPE_PRESENT = &H1
Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"
Const ADS_RIGHT_DS_CONTROL_ACCESS = &H100
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2 'Création des groupes
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
On Error Resume Next
Err.number = vbEmpty
' ***** Définition du fichier Texte où les données sont stockées
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set fs = CreateObject("Scripting.FileSystemObject")
Set FichierInfoClient = fs.openTextFile("D:\Mes Projets\Gestion Client 2004\Exe\InfoClient.txt")
' ***** Définition de l'objet dont nous avons besoin.
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
' ***** Connection à Active Directory , repris d'un autre script VBS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
' ***** Domaine dans lequel nous voulons créer un utilisateur
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set Root = GetObject("[ldap://RootDSE LDAP://RootDSE]")
DomainPath = Root.Get("DefaultNamingContext")
DomainName = "LDAP://" & DomainPath
wscript.echo "Nom du Domaine : " & chr(10) & DomainName
' ***** Initialise les infos
''''''''''''''''''''''''''''
i=0
While FichierInfoClient.AtEndOfStream=false and Err.number = vbEmpty
i = i + 1
InfoClient=split(FichierInfoClient.readline,":")
wend
Set Domain = GetObject(DomainName)
LoginClient = InfoClient(0)
NomClient = InfoClient(1)
PrenomClient = InfoClient(2)
PassWordClient = InfoClient(3)
DescriptionClient = InfoClient(4)
strUAC="512" 'permet d'activer le compte
strScriptPath = InfoClient(5)
GroupeCLient =InfoClient(6)
NomOUClient = InfoClient(7)
ClasseGroupe = InfoCLient(8) 'OU où se situe le Groupe Global de sécurité
GroupeAdmin = InfoClient(9)
ActivationClient=InfoClient(10)
UNCClient = InfoCLient(11)
LecteurReseauClient = InfoClient(12)
strProfilePath = InfoClient(13)
NomOUAdmin = InfoClient(14)
NomCompletClient = NomClient & " " & PrenomClient
LecteurReseau = LecteurReseauClient & ":"
wscript.echo "Info Client : " & chr(10) & LoginClient & ":" & NomClient & ":" & PrenomClient & ":" & PassWordClient & ":" &GroupeClient & ":" & NomOUClient & ":" & ClasseGroupe & ":" & GroupeAdmin & ":" & ActivationClient & ";" & LecteurReseauClient & ";" & LecteurReseau & ";"
'wscript.echo "Info Client : " & chr(10) & UNCClient & ":" & LecteurReseauClient
wscript.echo "Script client : " & chr(10) & strScriptPath
' ***** Création de l'OU si n'existe pas *******
'***********************************************
Erreur_avant = Err.number
Err.number = vbEmpty
Set objTestOU = GetObject("[ldap://OU LDAP://OU]=" & NomOUClient & "," & DomainPath)
If objTestOU.st = True Then
Set objDomain = GetObject("LDAP://" & DomainPath)
Set objOU = objDomain.Create("organizationalUnit", "OU=" & NomOUClient)
objOU.SetInfo
wscript.echo "Création de l'OU : " & NomOUClient
End If
Erreur = Err.Description
If Err.number <> vbEmpty Then Err.number=Erreur_avant
' ***** Création de l'utilisateur dans l'OU
''''''''''''''''''''''''''''''''''''''''''''
Description = "Organizational Unit"
Set OU_Client= GetObject("[ldap://OU LDAP://OU]=" & NomOUClient & "," & DomainPath)
Set adsUser = OU_Client.Create("user", "CN=" & NomCompletClient)
wscript.echo "Création du Client dans l'OU : " & chr(10) & NomOUClient
'***** Nom et Description des dossier Système (Perso et Profile)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sHomePath="[file://\\0880036L-P\Utilisateurs$\ \\0880036L-P\Utilisateurs$\]"
sProfilPath="[file://\\0880036L-P\Profils$\ \\0880036L-P\Profils$\]"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Définit les sAMAccountName et userPrincipalName
' attribués pour chaque utilisateur
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DescriptionClient = DescriptionClient & " " & ClasseGroupe
if GroupeClient <> GroupeAdmin then
wscript.echo "Création d'un utilisateur : " & chr(10) & NomOUClient
adsUser.Put "displayname",NomCompletClient
adsUser.Put "sAMAccountName", LoginClient
adsUser.Put "userPrincipalName", LoginClient
adsUser.put "description", DescriptionClient
if PrenomClient <> "" then adsUser.put "GivenName",PrenomClient
adsUser.put "sn",NomClient '
adsUser.put "homeDrive", LecteurReseau ' Lecteur réseau
adsUser.put "homeDirectory", UNCClient 'Chemin réseau
adsUser.SetInfo
else
wscript.echo "Création d'un Administrateur : " & chr(10) & NomOUClient
adsUser.put "sn",NomClient
adsUser.Put "displayname",NomCompletClient
adsUser.Put "sAMAccountName", LoginClient
adsUser.Put "userPrincipalName", LoginClient
adsUser.put "description", DescriptionClient
adsUser.SetInfo
end if
'*********** Mise en place du Mot de Passe **************
intUAC = adsUser.Get("userAccountControl")
If ADS_UF_DONT_EXPIRE_PASSWD AND intUAC Then
Wscript.Echo "Already enabled"
Else
adsUser.Put "userAccountControl", intUAC XOR ADS_UF_DONT_EXPIRE_PASSWD
adsUser.SetInfo
WScript.Echo "Password never expires is now enabled"
End If
adsUser.SetPassWord PassWordCLient ' Définition Mot de Passe
adsUser.SetInfo
wscript.echo "Mot de Passe créé.", Chr(10),Chr(10),"Cliquez pour continuer."
if strProfilePath <>"" then
adsUser.Put "ProfilePath",strProfilePath 'Définition du Profile
adsUser.SetInfo
wscript.echo "Profile Activé.", Chr(10),Chr(10),"Cliquez pour continuer."
end if
if strScriptPath <>"" then
adsUser.Put "scriptPath",strScriptPath ' Définition du Script
adsUser.SetInfo
wscript.echo "Profile et SCript Activé.", Chr(10),Chr(10),"Cliquez pour continuer."
end if
If ActivationClient = "YES" then
adsUser.AccountDisabled = FALSE 'Activation du compte
adsUser.SetInfo
wscript.echo "Compte Créé Activé !", Chr(10),Chr(10),"Cliquez pour continuer."
else
intUAC = adsUser.Get("userAccountControl")
adsUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
adsUser.SetInfo
wscript.echo "Compte Créé Désactivé", Chr(10),Chr(10),"Cliquez pour continuer."
end if
' ****** Définition du Groupe Global de Utilisateur
wscript.echo "Groupe Global du GroupeClient : ", Chr(10),Chr(10),GroupeClient , "Groupe Global du GroupeAdmin : ", Chr(10),Chr(10),GroupeAdmin
'****** Définition du Groupe Global du Compte créé ******
'********************************************************
'call CreateGroupe(GroupeClient) ' Vérifie si Groupe existe
' ***** Test Groupe Global si n'existe pas *******
'***********************************************
Erreur_Avant = Err.number
Err.number = vbEmpty
Set objGroup = GetObject ("[ldap://cn LDAP://cn]=" & GroupeClient & ",ou=" & NomOUAdmin & "," & DomainPath)
Set objNtSecurityDescriptor = objGroup.Get("ntSecurityDescriptor")
Erreur = Err.Description
If Err.number <> vbEmpty Then
'****** Création du Groupe Global si n'existe pas *******
'********************************************************
Set objTestOU = GetObject("[ldap://OU LDAP://OU]=" & NomOUAdmin & "," & DomainPath)
Set objGroup = objTestOU.Create("Group", "cn=" & GroupeClient)
objGroup.Put "sAMAccountName", GroupeClient
objGroup.Put "groupType", ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
objGroup.Put "info", "Groupe Global de sécurité " & GroupeClient
objGroup.Put "Description", "Groupe Global de sécurité " & GroupeClient
objGroup.SetInfo
'MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description & Err.Source)
WScript.Sleep 100
End If
Err.number = Erreur_Avant
'strGroup = "ou=Administrations, " & DomainPath
strGroup = "ou=" & NomOUAdmin &"," & DomainPath
Set objGroup = GetObject("LDAP://" & strGroup )
Set oGroup = objGroup.Create("Group","cn=" & GroupeClient) 'Ajoute l'utilisateur dans son groupe Global
oGroup.Add adsUser.AdsPath
Set oGroup=Nothing
'******* Définition du Groupe CLASSE de Utilisateur si c'est un élève
If ClasseGroupe<>"" Then
' ***** Test Groupe Global si n'existe pas *******
'***********************************************
Erreur_Avant = Err.number
Err.number = vbEmpty
Set objGroup = GetObject ("[ldap://cn LDAP://cn]=" & ClasseGroupe & ",ou=" & NomOUAdmin & "," & DomainPath)
Set objNtSecurityDescriptor = objGroup.Get("ntSecurityDescriptor")
Erreur = Err.Description
If Err.number <> vbEmpty Then
'****** Création du Groupe Global si n'existe pas *******
'********************************************************
Set objTestOU = GetObject("[ldap://OU LDAP://OU]=" & NomOUAdmin & "," & DomainPath)
Set objGroup = objTestOU.Create("Group", "cn=" & ClasseGroupe)
objGroup.Put "sAMAccountName", ClasseGroupe
objGroup.Put "groupType", ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
objGroup.Put "info", "Groupe Global de sécurité " & ClasseGroupe
objGroup.Put "Description", "Groupe Global de sécurité " & ClasseGroupe
objGroup.SetInfo
'MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description & Err.Source)
WScript.Sleep 100
End If
Erreur = Err.number
strGroup = "ou=" & NomOUAdmin &"," & DomainPath
set objGroup = GetObject("LDAP://" & strGroup )
set oGroup = objGroup.Create("Group","cn=" & ClasseGroupe) 'Ajoute l'utilisateur dans son groupe
oGroup.Add adsUser.AdsPath
set oGroup=Nothing
Err.number = Erreur_Avant
end if
If 1=2 Then '------------------ NE MARCHE PAS !!! -----------------------------------------------------------------------
' ********* Mise en place de l'Interdiction de modifier le mot de passe
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Set adsUser = GetObject("[ldap://cn LDAP://cn]=" & LoginClient & ",OU= 0880036L-P,dc=e-lorraine,dc=com")
Set objSD = adsUser.Get("ntSecurityDescriptor")
Set objDACL = objSD.DiscretionaryAcl
arrTrustees = array("nt authority\self", "EVERYONE")
For Each strTrustee in arrTrustees
Set objACE = CreateObject("AccessControlEntry")
objACE.Trustee = strTrustee
objACE.AceFlags = 0
objACE.AceType = ADS_ACETYPE_ACCESS_DENIED_OBJECT
objACE.Flags = ADS_ACEFLAG_OBJECT_TYPE_PRESENT
objACE.ObjectType = CHANGE_PASSWORD_GUID
objACE.AccessMask = ADS_RIGHT_DS_CONTROL_ACCESS
objDACL.AddAce objACE
Next
objSD.DiscretionaryAcl = objDACL
adsUser.Put "nTSecurityDescriptor", objSD
adsUser.SetInfo
wscript.echo "Mise en place des restrictions", Chr(10),Chr(10),"Cliquez pour continuer."
End If '----------------------------------------------------------------------------------------------
' ***** Définition du Fichier Texte où enregistrer le résultat du Script
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
CheminFichierResultat = "C:\Temp\Res_CreateClient.txt"
'CheminFichierResultat = "Res_CreateClient.txt"
Set Rfs = CreateObject("Scripting.FileSystemObject")
Set FichierResultat = Rfs.CreateTextFile(CheminFichierResultat,True)
wscript.echo "Eleves créés.", Chr(10),Chr(10),"Cliquez pour finir."
If Err.Number = vbEmpty Then
FichierResultat.WriteLine "FIN"
FichierResultat.close
wscript.echo "Compte créé.", Chr(10),Chr(10),"Cliquez pour finir."
Else
FichierResultat.WriteLine "ERROR"
FichierResultat.close
wscript.echo "Erreur... ", Err, Chr(10),Chr(10),"Cliquez pour finir."
End If