Bonjour,
J'aimerai si possible pouvoir attribuer les droits de modification aux utilisateurs d'une machine.
Dans un premier temps, j'ai créé le repertoire en vbs mais ensuite je bloque pour attribuer les droits
Est ce qu'il y a une solution ?
Merci
Bonjour,
J'aimerai si possible pouvoir attribuer les droits de modification aux utilisateurs d'une machine.
Dans un premier temps, j'ai créé le repertoire en vbs mais ensuite je bloque pour attribuer les droits
Est ce qu'il y a une solution ?
Merci
C'est sous XP pro pour le moment coté code, j'ai juste la création du repertoire, c'est après que je bloque ou plutot que je ne sais pas comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim oFSO,oFld Set oFSO = CreateObject("Scripting.FileSystemObject") 'Crée le repertoire Set oFld=oFSO.CreateFolder ("C:\Applis") Set oFld=oFSO.CreateFolder ("C:\Package")
En utilisant WMI, Win32_Directory et la méthode ChangeSecurityPermissions :
Un exemple :Description:
La méthode ChangeSecurityPermissions modifie les autorisations de sécurité pour le fichier logique spécifié dans le chemin d’accès de l’objet. Si le fichier logique est un répertoire, alors ChangeSecurityPermissions agira de façon récursive, en modifiant les autorisations de sécurité de tous les fichiers et sous-répertoires que contient le répertoire. ChangeSecurityPermissions renvoie une valeur entière de 0 si les autorisations ont été modifiées, et tout autre nombre pour indiquer une erreur.
Elle renvoie une des valeurs entières suivantes*:
0 - La requête a fonctionné correctement.
2 - L'accès a été interdit.
8 - Une erreur non spécifiée s’est produite.
9 - Le nom spécifié n'était pas valide.
10 - L'objet spécifié existe déjà.
11 - Le système de fichiers n’est pas NTFS.
12 - La plate forme n’est pas Windows NT ou Windows 2000.
13 - Le lecteur n’est pas le même.
14 - Le répertoire n’est pas vide.
15 - Il s’est produit une violation de partage.
16 - Le fichier de démarrage spécifié n'était pas valide.
17 - Un privilège requis pour l’opération n’est pas maintenu.
21 - Un paramètre spécifié n’est pas valide.
Qualifiers:
Description
ValueMap
Values
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") ' Obtain an instance of the the class ' using a key property value. Set objShare = objWMIService.Get("Win32_Directory.ReplaceKeyProperty=ReplacePropertyValue") ' Obtain an InParameters object specific ' to the method. Set objInParam = objShare.Methods_("ChangeSecurityPermissions"). _ inParameters.SpawnInstance_() ' Add the input parameters. objInParam.Properties_.Item("Option") = 5 ' Execute the method and obtain the return status. ' The OutParameters object in objOutParams ' is created by the provider. Set objOutParams = objWMIService.ExecMethod("Win32_Directory.ReplaceKeyProperty=ReplacePropertyValue", "ChangeSecurityPermissions", objInParam) ' List OutParams Wscript.Echo "Out Parameters: " Wscript.echo "ReturnValue: " & objOutParams.ReturnValue
Ici une autre façon de faire la même chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 strServer = "." Set objWMI = GetObject("winmgmts:\\" & strServer & "\root\cimv2") strWQL = "select * from Win32_Directory" Set objInstances = objWMI.ExecQuery(strWQL,,48) For Each objInstance in objInstances Set p_SecurityDescriptor = objWMI.Get("Win32_SecurityDescriptor").SpawnInstance_ p_Option = 0 ' Uncomment next line to actually execute the method! ' intResult = objInstance.ChangeSecurityPermissions(p_SecurityDescriptor, p_Option) Select case intResult Case 0 : WScript.Echo "Success" Case 2 : WScript.Echo "Access Denied" Case 8 : WScript.Echo "Unspecified failure" Case 9 : WScript.Echo "Invalid object" Case 10 : WScript.Echo "Object already exists" Case 11 : WScript.Echo "File system not NTFS" Case 12 : WScript.Echo "Platform not NT/Windows 2000" Case 13 : WScript.Echo "Drive not the same" Case 14 : WScript.Echo "Directory not empty" Case 15 : WScript.Echo "Sharing violation" Case 16 : WScript.Echo "Invalid start file" Case 17 : WScript.Echo "Privilege not held" Case 21 : WScript.Echo "Invalid parameter" End Select Next
ce que je ne comprend pas c'est ou je précise le répertoire et quel droit je lui applique.
je vais un peu plus détailler :
J'ai un utilisateur qui est admin local de la machine.
Je dois pour installer une appli, créer deux répertoires et attribuer les droits de modification pour le groupe des utilisateurs.
Bonne remarque.ce que je ne comprend pas c'est ou je précise le répertoire et quel droit je lui applique.
Dans la requête WMI (qui ressemble au SQL). Si tu mets un where tu filtres comme en SQL le nombre d'éléments retrounés. Normalement undevrait fonctionner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Where Name = 'repertoire'
p_option contient une valeur au droit que tu veux affecter. Il faut faire une recherche sur le net avec le nom de la méthode pour obtenir les valeurs possibles pour les droits. Désolé j'ai oublié de vérifier cela lors de mon précédent post.
Ensuite tu dois décommenter cette ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ' intResult = objInstance.ChangeSecurityPermissions(p_SecurityDescriptor, p_Option)
Merci pour ton aide
en faisant des recherches avec ce que tu m'as indiqué, j'ai trouvé une autre solution la voici au cas ou ca intéresserait quelqu'un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Option Explicit Dim objFSO, objFolder, objShell Dim strUsername, strDirectory, strDirectory2, intRunError FolderCreate NTFSPermissions 'Function de creation des repertoires Sub FolderCreate () strDirectory = "I:\Applis" strDirectory2 = "I:\Admin" Set objFSO = CreateObject("Scripting.FileSystemObject") 'Creation du répertoire Applis If objFSO.FolderExists(strDirectory) Then Set objFolder = objFSO.GetFolder(strDirectory) WScript.Echo strDirectory & " existe déjà " Else Set objFolder = objFSO.CreateFolder(strDirectory) End If 'Creation du répertoire Admin If objFSO.FolderExists(strDirectory2) Then Set objFolder = objFSO.GetFolder(strDirectory2) WScript.Echo strDirectory2 & " existe déjà " Else Set objFolder = objFSO.CreateFolder(strDirectory2) End If End Sub 'Function appliquant les droits de mofification pour les utilisateurs Sub NTFSPermissions () Set objShell = CreateObject("Wscript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strDirectory) Then 'Attribution des droits intRunError = objShell.Run("%COMSPEC% /c Echo Y| cacls " _ & strDirectory & " /e /c /g Utilisateurs:C ",2,True) If intRunError <> 0 Then Wscript.Echo "Error assigning permissions for user " _ & strUsername & " to home folder " & strDirectory End If End If End Sub
Partager