[R] Renommer en masse dossiers et partages

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

[R] Renommer en masse dossiers et partages

#1

Message par denbaat »

Bonjour,

Alors voila, j'aimerais avoir un script pouvant renommer en masse des dossiers partagés, renommer le dossier et renommer le partage.
Actuellement j'ai 500 dossiers au nom des utilisateur, mais mal nommé il y a 6 ans, ce qui me bloque pour mes futurs scripts.

Les dossiers aujourd’hui ce nomme : PRENOM_NOM et le partage PRENOM_NOM$
Et j'aimerais renommer tous en : PRENOM.NOM et le partage PRENOM.NOM$

J'aimerais le faire seule, mais je ne sais pas par où commencer. Le point bloquant pour moi sera de détecter le "_" et de le transformer en "."

Merci d'avance.
Modifié en dernier par denbaat le ven. 02 août 2013 11:48, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#2

Message par jguinch »

Salut
Tout d'abord, il faudra lister les répertoires. Pour ça, tu peux utiliser FileFindFirstFile/FileFindNextFile ou _FileListToArray.
Pour renommer les dossiers, DirMove.
Pour remplacer le "_" par ".", StringReplace ou StringRegExpReplace (un peu plus compliqué)

Pour renommer les partages, tu peux regarder les fonctions _NetSshare_xxx, mais je ne sais pas si tu pourras renommer les partages. Le plus simple sera de supprimer les partages _Net_Share_ShareDel et les recréer _Net_Share_ShareAdd.

Comme tu souhaites le faire seul, je n'ai pas mis de code. Si tu as besoin d'un peu de code on pourra t'en donner, pas de soucis.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#3

Message par denbaat »

Merci, je travail dessus, et je te tien au courant de l'avancement si j'ai besoin d'aide.

Je suis obliger de recréer les partages, car le rename des dossiers détruit le partage.
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#4

Message par denbaat »

J'ai bloque sur un truc, j'ai bien recréé mon partage, mais je n'arrive pas à remettre des autorisations de partage. A la création j'ai même pas le "tout le monde" par Default, c'est vide.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#5

Message par jguinch »

Ah oui, j'y pensais plus... :?
Du coup, le plus simple sera de créer les partages en faisant appel à la ligne de commande.
Regarde "net share /?" sous DOS.
Exemple de commande DOS : net share NOM.PRENOM$=d:\NOM.PRENOM$ /grant:"NOM.PRENOM",FULL
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#6

Message par denbaat »

C'est parfait :D

Ça fonctionne :)

Par contre, je voudrais pas trop abusé. Mais j'aurais un dernier besoin. j'expliquer un peu la situation avant.
Nous donnons la possibilité aux utilisateurs (sur leur session) d'avoir un dossier personnel de travail, et nous donnons cette possibilité la aussi au compte windows des machines de production.

exemple :

JEAN.DUPOND monte le partage \\serveur1\jean.dupond$ ce partage possède comme autorisation le user AD jean.dupond en contrôle total
Mais pour une machine de production cela peux être différent. et malheureusement les dossier USER et USER PROD sont au même endroit.
MACHINE1 monte le partage \\serveur1\machine1$ ce partage possède comme autorisation le user AD machine1 en contrôle total ET un groupe GROUPE_USER_PROD

Donc avec le script ci-dessous, je triche un peu en récupérant le non du dossier qui à le même nom sur le user dans l'AD. sauf que pour mon partage MACHINE1$ je suis niqué et je me retrouve avec comme autorisation le user machine1 seulement.

Donc je vais devoir arriver à listé les nom des USER ou GROUPE (et non partage) dans les autorisations pour pouvoir les mettre ensuite dans le new partage ;( :roll:

Voici mon code actuel

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3>
#include <NetShare.au3>

Local $vflist
Local $replace
Local $folderlist

$path="E:\USER\"

; ###Actualisation de la variable Lister tous les dossiers###
$folderlist = _FileListToArray($path)
For $i=1 to $folderlist[0]
; ###Remplace le caractere "_" par "."###
$replace = StringReplace($folderlist[$i], "_", ".")
; ###Renomme le dossier###
DirMove($path & $folderlist[$i], $path & $replace)
Next

; ###Ré-actualisation de la variable Lister tous les dossiers###
$folderlist = _FileListToArray($path)
For $i=1 to $folderlist[0]
; ###Partage le dossier###
RunWait(@ComSpec & ' /c net share ' & $folderlist[$i] & "$" & '=' & $path & $folderlist[$i] & ' /grant:"' & $folderlist[$i] & '",FULL', @SystemDir)
Next
 
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#7

Message par jguinch »

Pour lister les autorisations de partage, c'est moins évident...
J'ai cherché un peu mais rien trouvé qui permettrait de faire ça avec AutoIt sans passer par une commande externe.

En tête, j'ai deux idées de commandes qui nous donnerons les infos, mais il faudra rediriger la sortie de commande vers un fichier et le parser :
- net share <partage> - inconvénient : dépend de la langue du système
- subinacl (à télécharger) : subinacl /share <partage> - inconvénient : un peu plus pénible à décortiquer
Dans ces deux cas, il faudra lire le résultat et faire des découpages pour récupérer les infos qui nous intéressent.

J'ai bricolé un petit truc si ça te tente, testé uniquement sous Windows 7x64 FR :
► Afficher le texte_Net_Share_ShareGetPermissions
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#8

Message par Tlem »

Eventuellement, WMI peut être utilisé !
http://www.developpez.net/forums/d22382 ... -partages/
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#9

Message par jguinch »

@Tlem : pourtant j'ai passé pas mal de temps à chercher, pas assez apparemment :oops: En tout cas merci, ça m'énervait de pas trouver.
Du coup, c'est beaucoup plus propre avec WMI :
► Afficher le texte_Net_Share_ShareGetPermissions
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#10

Message par denbaat »

Merci pour vos réponses.

J'ai peut être une idée plus simple pour moi :), je vais travaillé dessus et je vous tien au courant.


du coté de la base de registre.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\security\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\

l'idée et de récupérer la valeur de la REG_BINARY dans security au nom de l'ancien nom de partage, et de recréer la clé sous le nouveau nom avec la valeur récupérer.
denbaat
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 07 févr. 2012 09:28
Status : Hors ligne

Re: [..] Renommé en masse nom dossier et partage

#11

Message par denbaat »

C'est bon ça fonctionne avec la base de registre :)

Au final le script a totalement changé

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3>

Local $replace, $folderlist, $regfoldershare, $replace, $replace_regfoldershare

$path="E:\USER\"

$folderlist = _FileListToArray($path)
For $i=1 to $folderlist[0]
$regfoldersharesecurity = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\security\",$folderlist[$i] & "$")
$regfoldershare = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\",$folderlist[$i] & "$")
$replace_regfoldershare = StringReplace($regfoldershare,"_",".")
$replace = StringReplace($folderlist[$i], "_", ".")
DirMove($path & $folderlist[$i], $path & $replace)
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\security",$folderlist[$i] & "$")
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares\security",$replace & "$","REG_BINARY",$regfoldersharesecurity )
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares",$folderlist[$i] & "$")
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares",$replace & "$","REG_MULTI_SZ",$replace_regfoldershare )
Next
 
Je précise une chose (REDÉMARRAGE DU SERVEUR OBLIGATOIRE) pour prendre en compte la base de registre
Répondre