pricrot
Messages postés6Date d'inscriptionjeudi 24 août 2006StatutMembreDernière intervention20 septembre 2006
-
11 sept. 2006 à 13:52
thyouston
Messages postés5Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention11 septembre 2006
-
11 sept. 2006 à 15:52
Bonjour
J'souhaite créer des répertoire au nom ( de connexion) de chaque utilisateur.
Mais j'ai un gros problème. J'ai bien fait le script qui me permet de créer un répertoire pour chaque utilisateur présent dans une OU de l'AD. La création fonctionne sans problème, mais, exécutant ce script en tant qu'adminsitrateur, c'est l'administrateur qui a les droits sur ces répertoires, et non chaque user.
Le problème est donc de pouvoir ajouter le droit pour chaque utilisateur d'accèder à son répertoire en R/W.
Je n'ai pas encore trouvé la solution
Si quelqu'un a des pistes...Suis preneur
thyouston
Messages postés5Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention11 septembre 2006 11 sept. 2006 à 15:52
Tiens voici un script que j'ai fait en reprenant des trucs à droite à gauche.
Il te permet de creer un user, de l'associer a un groupe par defaut et a un groupe specifique, de lui creer un repertoire perso et lui associer les droits complets pour les admins du domain et l'utilisateur.
il s'agit d'un script que j'avais utiliser dans un fichier hta, je ne t'ai copier que la partie script.
L'interet pour toi est dans les dernieres fonctions.
[ldap://RootDSE ]
'Récupération de l'environnement
set objRootDSE = getobject("[ldap://RootDSE LDAP://RootDSE]")
DomainName = objRootDSE.get("Rootdomainnamingcontext")
Set objSysInfo = CreateObject("ADSystemInfo")
DomainDNSName = objSysInfo.domainDNSName
DNSMail = "toto.com" 'Renseigner le DNS du mail du nouvel utilisateur
DefaultPassword = "PassWord" 'Renseigner le mot de passe par defaut qui sera associé au nouvel utilisateur
OUName = "Utilisateurs" 'Renseigner l'OU par defaut dans laquelle sera ajouté le nouvel utilisateur
DefaultGroup = "Toto" 'Renseigner le groupe par defaut dans lequel sera ajoute le nouvel utilisateur
AdminServer = "FilesServer" 'renseigner le serveur de stockage des repertoires
UsersHomeFolder = "D:\users" 'renseigner le chemin sur le serveur de stockage
DefaultShare = "Admins du domaine" 'renseigner ici un group ou utilisateur qui aura acces par defaut au repertoire (en plus de l'utilisateur)
strScript = SamAccountName & ".bat"
VerifOU(OUName)
Select Case ValidOU
Case "0"
EraseVar
Exit Sub
Case "1"
main
End Select
'------
End Sub
'------
'------------
Function Main
'------------
Set dom = GetObject("LDAP://" & ObjOU)
'saisir les infos utilisateurs
EnterUser
Select Case ValidUser
Case "0"
MsgBox "Vous devez renseigner le LOGIN."
EraseVar
Exit Function
Case "1"
ValidUser = "OK"
Case "2"
EraseVar
Exit Function
Case "3"
MsgBox "Vous devez renseigner tous les champs."
EraseVar
Exit Function
End Select
'saisir le nom du groupe
EnterGroup
If ValidGroup <> 1 Then
MsgBox "Vous devez sélectionner un groupe."
EraseVar
Exit Function
End if
'-------------------------
'Création de l'utilisateur
'-------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
Set newUsr = dom.Create("user", "CN=" & SamAccountName)
Set ProfileServer = fso.GetFolder("\" & AdminServer & "\users$") 'renseigner le répertoire racine des répertoires perso qui a été partagé sur le serveur
'--------------------------------------------------------------------------
'Ajouter l'utilisateur au groupe par defaut et au groupe défini en variable
'--------------------------------------------------------------------------
Const ADS_PROPERTY_APPEND = 3
Dim objConnectionGrp, objConnectionUsr, objConnectionDefGrp, objCommandGrp, objCommandUsr, objCommandDefGrp, objRecordSetGrp, objRecordSetUsr, objRecordSetDefGrp
Dim dtStart
'Ouverture des connexions LDAP
dtStart = TimeValue(Now())
Set objConnectionGrp = CreateObject("ADODB.Connection")
Set objCommandGrp = CreateObject("ADODB.Command")
objConnectionGrp.Provider = "ADsDSOObject"
objConnectionGrp.Open "Active Directory Provider"
Set objCommandGrp.ActiveConnection = objConnectionGrp
Set objConnectionUsr = CreateObject("ADODB.Connection")
Set objCommandUsr = CreateObject("ADODB.Command")
objConnectionUsr.Provider = "ADsDSOObject"
objConnectionUsr.Open "Active Directory Provider"
Set objCommandUsr.ActiveConnection = objConnectionUsr
Set objConnectionDefGrp = CreateObject("ADODB.Connection")
Set objCommandDefGrp = CreateObject("ADODB.Command")
objConnectionDefGrp.Provider = "ADsDSOObject"
objConnectionDefGrp.Open "Active Directory Provider"
Set objCommandDefGrp.ActiveConnection = objConnectionDefGrp
Set objRecordSetGrp = objCommandGrp.Execute
Set objRecordSetUsr = objCommandUsr.Execute
Set objRecordSetDefGrp = objCommandDefGrp.Execute
'----------------------------------
'Ajout au groupe defini en variable
'----------------------------------
Dim objGroup
If objRecordsetGrp.RecordCount <> 0 Then
Set objGroup = GetObject("LDAP://" & objRecordSetGrp.Fields(0).Value)
objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array(objRecordSetUsr.Fields(0).Value)
objGroup.SetInfo
End If
Set objGroup = Nothing
'--------------------------
'Ajout au groupe par defaut
'--------------------------
Dim objDefaultGroup
Set objConnectionGrp = Nothing
Set objConnectionUsr = Nothing
Set objConnectionDefGrp = Nothing
Set objCommandGrp = Nothing
Set objCommandUsr = Nothing
Set objCommandDefGrp = Nothing
Set objRecordSetGrp = Nothing
Set objRecordSetUsr = Nothing
Set objRecordSetDefGrp = Nothing
Set dtStart = Nothing
'--------------------------------
'Création du répertoire personnel
'--------------------------------
If fso.FolderExists(ProfileServer & "" & SamAccountName) = False Then
fso.CreateFolder(ProfileServer & "" & SamAccountName)
End If
'---------------------
'Partage du répertoire
'---------------------
Dim FolderName, ShareName, Services, Share, ShareFolder
MsgBox "L'utilisateur " & FirstName & " " & Lastname & ", Matricule: " & SamAccountName & " a bien été créé."_
& vbCrLf & vbCrLf & "Il est membre du groupe par défaut " & DefaultGroup & ", ainsi que du groupe " & Group & "."_
& vbCrLf & vbCrLf & "Le répertoire associé " & SamAccountName & " a été créé et partagé sur le serveur " & AdminServer & "."_
& vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Note: Il reste à paramétrer le quota du répertoire."_
& vbCrLf & vbCrLf & "le script associé est modele.bat."
'-----------------------
Function VerifOU(OUName)
'-----------------------
'On verifie si l'OU existe
Dim msg0, yn, objConnection, objCommand, objRecordSet
msg0 = "L'OU: " & OUName & " n'éxiste pas."_
& vbCrLf & vbCrLf & "Fermer la fenêtre et vérifier le nom de l'OU dans le script."
'Ouverture de la connexion LDAP
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
'On récupère le nom distingué de l'OU
objCommand.CommandText = "<LDAP://" & DomainName & ">;(&(objectClass=organizationalUnit)" & "(name=" & OUName & "));distinguishedName;subtree"
Set objRecordSet = objCommand.Execute
'on verifie si l'OU existe ou non
If objRecordset.RecordCount = 0 Then
yn = MsgBox(msg0, vbQuestion + vbOKOnly, "Vérification de l'existence de l'OU")
ValidOU = 0
objConnection.Close
Set msg0 = Nothing
Set yn = Nothing
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
Exit Function
End If
objOU = objRecordSet.Fields(0).Value
objConnection.Close
Set msg0 = Nothing
Set yn = Nothing
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
ValidOU = 1
'-----------
End Function
'-----------
'-----------------
Function EnterUser
'-----------------
Dim InputPrompt1, InputPrompt2, InputPrompt3
If SamAccountName <> Empty Then
VerifUser(SamAccountName)
Else
ValidUser = 0
Set InputPrompt1 = Nothing
Set InputPrompt2 = Nothing
Set InputPrompt3 = Nothing
Exit Function
end if
If ValidUser = 2 then
Set InputPrompt1 = Nothing
Set InputPrompt2 = Nothing
Set InputPrompt3 = Nothing
Exit Function
End If
FirstName = Format_chaine(InputPrompt2)
If FirstName = Empty Then
MsgBox "Le prénom de l'utilisateur n'a pas été renseigné."
ValidUser = 3
End If
LastName = UCase(InputPrompt3)
If LastName = Empty Then
MsgBox "Le nom de l'utilisateur n'a pas été renseigné."
ValidUser = 3
End If
Set InputPrompt1 = Nothing
Set InputPrompt2 = Nothing
Set InputPrompt3 = Nothing
'-----------
End Function
'-----------
'-----------------------
Function VerifUser(User)
'-----------------------
'On verifie si l'utilisateur existe
Dim msg0, yn, objConnection, objCommand, objRecordSet
msg0 = "Le login " & User & " est déjà attribué."_
& vbCrLf & vbCrLf & "Vérifier le nom du login."
'Ouverture de la connexion LDAP
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
'On récupère le nom distingué du groupe
objCommand.CommandText = "<LDAP://" & DomainName & ">;(&(objectClass=user)" & "(name=" & user & "));distinguishedName;subtree"
Set objRecordSet = objCommand.Execute
'on verifie si l'utilisateur existe deja
If objRecordset.RecordCount <> 0 Then
yn = msgBox(msg0, vbQuestion + vbOKOnly, "Vérification de l'utilisation du Login")
ValidUser = 2
Exit Function
End if
ValidUser = 1
objConnection.Close
Set msg0 = Nothing
Set yn = Nothing
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
'-----------
End Function
'-----------
'------------------
Function EnterGroup
'------------------
ValidGroup = 0
If GroupName(0).Checked Then
Group = "GROUPE1"
ValidGroup = 1
ElseIf GroupName(1).Checked Then
Group = "GROUPE2"
ValidGroup = 1
ElseIf GroupName(2).Checked Then
Group = "GROUPE3"
ValidGroup = 1
ElseIf GroupName(3).Checked Then
Group = "GROUPE4"
ValidGroup = 1
ElseIf GroupName(4).Checked Then
Group = "GROUPE5"
ValidGroup = 1
End If
'-----------
End Function
'-----------
'-----------------------------
Function Format_chaine(Chaine)
'-----------------------------
'Transforme la 1ere lettre de la chaine en maj
Dim intLen, Lchaine, intIdx, a, strFinale
intLen = Len(Chaine)
Lchaine = LCase(Chaine)
For intIdx = 1 To intLen
a = Mid(Lchaine, intIdx, 1) If intIdx 1 Then a UCase(a)
If intIdx > 2 Then If Mid(Lchaine, intIdx - 1, 1) " " Then a UCase(a) If Mid(Lchaine, intIdx - 1, 1) "-" Then a UCase(a)
End If
strFinale = strFinale & a
Next
Format_Chaine = strFinale
Set intLen = Nothing
Set Lchaine = Nothing
Set intIdx = Nothing
Set a = Nothing
'-----------
End Function
'-----------
'---------------------------------------
Function ReplaceACL(foldernm, permspart)
'---------------------------------------
'Set permissions on users home directory
If fso.FolderExists(foldernm)= False Then
MsgBox "Sorry this folder is not present on the server"
Else
ChangeACLS foldernm, permspart, "REPLACE", "FOLDER"
End If
'-----------
End Function
'-----------
'--------------------------------------------
Function ChangeAcls(FILE,PERMS,REDIT,FFOLDER)
'--------------------------------------------
'Edit ACLS of specified folder
If ACLAction="ADD" Then
If UCase(FFOLDER)="FOLDER" Then
addace dacl, namevar, rightvar, ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_SUB_NEW
addace dacl, namevar, rightvar, ADS_ACETYPE_ACCESS_ALLOWED, ADS_ACEFLAG_INHERIT_ACE
Else
addace dacl, namevar, rightvar, ADS_ACETYPE_ACCESS_ALLOWED, 0
End If
End If
Next
For Each ace in dacl
If instr(ucase(ace.trustee),"NT AUTHORITY") then
newtrustee = right(ace.trustee, len(ace.trustee)-instr(ace.trustee, ""))
ace.trustee = newtrustee
End If
Next
Set tmpcmdVar = Nothing
Set cmdparts = Nothing
Set nameVar = Nothing
Set rightVar = Nothing
Set tmpVar1 = Nothing
Set cmdArray = Nothing
Set x = Nothing
Set ace = CreateObject("AccessControlEntry")
ace.Trustee = trustee
Select Case UCase(MaskVar)
Case "F"
ace.AccessMask = RIGHT_FULL
Case "C"
ace.AccessMask = RIGHT_READ or RIGHT_WRITE or RIGHT_EXECUTE or RIGHT_DELETE
Case "R"
ace.AccessMask = RIGHT_READ or RIGHT_EXECUTE
End Select
ace.AceType = acetype
ace.AceFlags = aceflags
dacl.AddAce ace
'-----------
End Function
'-----------