Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/11/2012, 11h04   #1
Choco-Boy
Invité de passage
 
Inscription : novembre 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 3
Points : 2
Points : 2
Par défaut Vbscript pour modifier des Droits NTFS d'un Dossier et de son contenu

Bonjour,

Je vous écris car je suis à la recherche d'un script vbs me permettant de modifier les droits de certain dossiers.
En effet je fais beaucoup de prises en main à distance et il m'est souvent nécessaire d'attribuer des droits.

J’ai trouvé par hasard ce script de Hackoofr:
Code :
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
 
'Vbscript pour modifier des Droits NTFS d'un Dossier et de son contenu (sous-dossiers et Fichiers)
'© Hackoo 25/03/2012
Dim oFSO,oFld 
Set oFSO = CreateObject("Scripting.FileSystemObject")
Dossier = "c:\Essai"
If Not oFSO.FolderExists(Dossier) Then
'Crée le repertoire
Set oFld=oFSO.CreateFolder(Dossier)
end if
 
If oFSO.FolderExists(Dossier) Then
For each Fichier in oFSO.GetFolder(Dossier).Files
'MsgBox "Fichier :" & Fichier.path,64,"Nom des Fichiers"
LectureSeule(Fichier) 'chaque fichier devient en lecture seule 
Next
End if
 
If oFSO.FolderExists(Dossier) Then
For each Folder in oFSO.GetFolder(Dossier).SubFolders
'MsgBox "Dossier :" & Folder.Path,64,"Nom des Dossiers"
LectureSeule(Dossier) 'chaque dossier devient en lecture seule
Next
End If
 
ControlTotale(Dossier) ' Pour rendre un controle Totale du dossier parent
 
Function LectureSeule(objet)
Set Ws = CreateObject("WScript.Shell")
Set ProcessEnv = Ws.Environment("Process")
NomUtilisateur = ProcessEnv("USERNAME")
Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":r administrateurs:r"
Result = ws.Run(Command,0,True) 'exécution de la commande sans afficher la console MS-DOS
End Function
 
Function ControlTotale(objet)
Set Ws = CreateObject("WScript.Shell")
Set ProcessEnv = Ws.Environment("Process")
NomUtilisateur = ProcessEnv("USERNAME")
Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":f administrateurs:f"
Result = ws.Run(Command,0,True) 'exécution de la commande sans afficher la console MS-DOS
End Function
 
Function qq(strIn)
qq = Chr(34) & strIn & Chr(34)
End Function
Ce script correspond exactement à ce que je voulais faire (sans savoir comment =).
Je rencontre néanmoins des difficultés (très faibles connaissances en programmation).

Je souhaiterai savoir s’il est possible de changer « administrateurs » en « tout le monde » ou « everyone », j’ai essayé mais cela ne fonctionne pas. J’ai uniquement réussi en mettant « utilisateurs ».

J’ai rencontré une autre difficulté. Si le chemin du dossier est dans « program files » ou « windows », le script ne fonctionne pas. Comme ci je n’avais pas le droit de modifier le contenu de ces dossiers.
Y a-t-il une spécificité pour ces chemins?

Le script permet de mettre l’utilisateur actuel et le groupe administrateurs en contrôle total du dossier. Est-il possible de rajouter d’autres groupes ?
L’idéal pour moi serait : l’utilisateur actuel + Tout le monde + utilisateurs + administrateurs en contrôle total.

Merci d’avance pour tout élément que vous pourrez m’apporter.

Cordialement
Thomas
Choco-Boy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/11/2012, 18h01   #2
hackoofr
Expert Confirmé
 
Avatar de hackoofr
 
Homme Mehdi Tounisiano
Enseignant
Inscription : juin 2009
Messages : 1 701
Détails du profil
Informations personnelles :
Nom : Homme Mehdi Tounisiano
Âge : 38
Localisation : Tunisie

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : juin 2009
Messages : 1 701
Points : 3 884
Points : 3 884

Ce script est basé sur la commande Cacls
Un petit help sur cette commande il suffit de taper Cacls /?
CACLS non documenté : Capacités des autorisations de groupe
hackoofr est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 11h56   #3
Choco-Boy
Invité de passage
 
Inscription : novembre 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 3
Points : 2
Points : 2
Bonjour,

Merci pour votre réponse et pour les liens sur la fonction calc.
Malheureusement, ça ne m’a pas aidé à résoudre mon problème.

En effet, après tests, il m’est toujours impossible d’utiliser le script dans un dossier dans un dossier système tel que (C:\Windows\test ou C:\Program Files\test].

Pour corriger ce problème, je pense qu’il faudrait exécuter le script en tant qu’administrateur.
Cette fonction n’est pas disponible en faisant un clic droit sur un vbs.
J’ai donc pensé à transformer le .vbs en .exe pour pouvoir le lancer en administrateur, il faut que je fasse des recherches là-dessus.

Apparemment, il y a une mécanique particulière à utiliser car sur Windows, « administrateur » et « système » n’ont plus le contrôle total des dossiers système (Windows, programmes, utilisateurs). Connaissez-vous une astuce pour se rendre propriétaire de ces dossiers système afin de pouvoir y modifier les droits?

Egalement, je ne parviens toujours pas à choisir comme groupe « tout le monde » ou « everyone ».


Je vais continuer mes recherches et je vous tiens au courant.

Thomas
Choco-Boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 16h04   #4
Daynvheur
Nouveau Membre du Club
 
Technicien Help Desk
Inscription : décembre 2012
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Technicien Help Desk

Informations forums :
Inscription : décembre 2012
Messages : 23
Points : 29
Points : 29
Code :
1
2
	NomUtilisateur = ProcessEnv("USERNAME")
	Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":f administrateurs:f"
En modifiant les lignes NomUtilisateur = "everyone" ?

Le "administrateurs" m'étonne : d'après la documentation de CACLS ( /G util:perm Donne à l'utilisateur spécifié les droits d'accès. _ Perm peut être*: R Lecture _ W Écriture _ C Modification (en écriture) _ F Contrôle total), la ligne de commande copiée donne le contrôle total à "%USERNAME%" (la personne exécutant la ligne de commande) et "administrateurs" (le groupe d'utilisateurs).

Essaie avec ceci ? (Pour garantir le contrôle total à tout le monde dans la fonction ControlTotale().)
Code :
1
2
	NomUtilisateur = "tout le monde"
	Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":f"
Nota : j'avoue ne pas savoir à quoi correspond le qq().

Édition pour le problème du Program Files : Depuis Windows Vista (en fait, depuis l'UAC), le Program Files est émulé pour les utilisateurs, il se trouve "réellement" dans un dossier type "C:\Users\NOM\AppData\Local\.virtualstore", pour éviter les modifications indésirées du système (idem avec les dossiers système comme "C:\Windows"). Pour éviter des soucis, je t'invite à utiliser un autre dossier que ceux présent par défaut dans l'ordinateur pour l'exécution et l'installation de programmes. Ou à désactiver l'UAC, mais ce serait regrettable.
Pour lancer un script en mode administrateur, il faut lancer la commande "runas /u:[DOMAINE\ADMINISTRATEUR] cmd", et placer le VBS dans la fenêtre (son nom va se mettre en bout de ligne de texte) pour l'exécuter en mode admin.
Daynvheur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 17h35   #5
Choco-Boy
Invité de passage
 
Inscription : novembre 2012
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2012
Messages : 3
Points : 2
Points : 2
Bonjour,

Merci pour la réponse.
Effectivement, l'emulation des dossiers système par l'UAC explique le problème d'accès.
J'ai essayé
Code :
1
2
NomUtilisateur = "tout le monde"
Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":f"
Malheuresement, cela n'a pas fonctionné.
Apparement, "tout le monde" n'est pas prit en compte.
L'autre solution serait de mettre les droits à utilisateurs + adminsitrateurs pour avoir un équivalent de "tout le monde", mais je n'ai pas réussi non plus.

Je continue les recherches =)

Petite question:
Du fait que les fichiers système soient émulés, est il possible d'attibuer les droits en passant pas un autre chemin? Exemple: C:\Users\NOM\AppData\Local\.virtualstore
Je n'y crois pas trop, mais on sait jamais

Edit: J'ai remplacé "tout le monde" par "everyone", même résultat.
Choco-Boy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 17h44   #6
Daynvheur
Nouveau Membre du Club
 
Technicien Help Desk
Inscription : décembre 2012
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Technicien Help Desk

Informations forums :
Inscription : décembre 2012
Messages : 23
Points : 29
Points : 29
Citation:
Envoyé par Choco-Boy Voir le message
Petite question:
Du fait que les fichiers système soient émulés, est il possible d'attibuer les droits en passant pas un autre chemin? Exemple: C:\Users\NOM\AppData\Local\.virtualstore
Je n'y crois pas trop, mais on sait jamais
Si tu lances le script en mode administrateur de l'ordinateur, il n'y a plus d'UAC effective, les modifications sur (dont les droits d'accès au) le dossier Program Files ne sont plus émulés.

Sinon, tu pourrais vérifier quelque-chose comme NomUtilisateur=ProcessEnv("COMPUTERNAME")&"\Tout le monde" ?
Daynvheur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h45.


 
 
 
 
Partenaires

Hébergement Web