IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Optimisation de code


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut Optimisation de code
    Salut tout le monde

    Je cherche à faire un script qui parcours un répertoire. sur chaque dossier contenant un fichier en extension .config le script doit vérifier les droits et les ajouter si besoin (il y'a 3 droits à ajouter pour 2 users à chaque fois).

    Pour l'instant mon script est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #Liste des dossiers contenant un .config
    $fic=Get-ChildItem -recurse -Include *.Config
    
    #Ajout des droits sur chaque dossier
    foreach ($f in $fic) {
    	#Ajout du droit 1 pour le User1
    	$ace = new-object Security.AccessControl.FileSystemAccessRule("Domaine\user", "ReadPermissions", "Deny")
    	$acl.AddAccessRule($ace)
    	set-acl $f.directory $acl
    
    	#Ajout du droit 2 pour le User1
    	....
    }
    Pour l'instant ma solution marche, mais cela m'oblige à ajouter tous les droits sur chaque dossier (ce script sera lancé hebdomadairement). J'aimerais qu'il vérifie avant les droits manquants et les ajoutes en conséquence et le loggifie.

    Pour cela j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Vérification des droits :
    $acl = Get-Acl $f.directory
    Du coup si je fais un $acl.Access j'ai la liste de tous les droits du dossier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FileSystemRights  : ReadAttributes, ReadPermissions
    AccessControlType : Deny
    IdentityReference : Domaine\User1
    IsInherited       : False
    InheritanceFlags  : ContainerInherit, ObjectInherit
    PropagationFlags  : None
    
    FileSystemRights  : FullControl
    AccessControlType : Deny
    IdentityReference : Domaine\User2
    IsInherited       : False
    InheritanceFlags  : ContainerInherit, ObjectInherit
    PropagationFlags  : None
    ....
    Je peux atteindre toutes les données que je veux par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $acl.Access[1].FieSystemRights
    FullControl
    Honnêtement avec tous ça je vois comment m'en sortir mais ce serait juste pas propre du tout, dans la solution que j'ai en tête j'utiliserai des boucles à valvolo, des flags...

    Quelqu'un verrait-il une solution simple à mettre en place ?

    D'avance un grand merci pour votre aide et bonne fin de semaine.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par julie75 Voir le message
    Quelqu'un verrait-il une solution simple à mettre en place ?
    Si tu découpes ton traitement en fonctions ce peut êre plus simple à réaliser et surtout à réutiliser. Ecrit déjà une première version.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut
    Bonjour Laurent !

    Ayant plus de temps maintenant, je vais me pencher sur mon script. Je vais faire des fonctions et élaborer une ébauche de solution, mais avant. Vois-tu comment je pourrais rechercher si un droit pour un compte est présent sur mon dossier.

    Sachant que les droits du dossier sont contenu dans la variable

    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
    $acl.access
    
    FileSystemRights  : ReadAttributes, ReadPermissions
    AccessControlType : Deny
    IdentityReference : Domaine\User1
    IsInherited       : False
    InheritanceFlags  : ObjectInherit
    PropagationFlags  : InheritOnly
    
    FileSystemRights  : FullControl
    AccessControlType : Deny
    IdentityReference : Domaine\User1
    IsInherited       : False
    InheritanceFlags  : ContainerInherit, ObjectInherit
    PropagationFlags  : None
    ...
    Comment rechercher dans cette variable si l'utilisateur Domaine\User1 à le droit FullControl par exemple ?

    Je suis sur que c'est faisable en 1 ligne mais je ne vais pas comment faire ça simplement.

    Pour l'instant j'ai l'algo (niveau débutante) suivant :
    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
    $Droit1 = "false"
    $Droit2 = "false"
    ...
    ## On boucle sur chaque droits du dossier. On flag les droits que nous avons besoin 
    foreach ($a in $acl.access){
    	if ($a.FileSystemRights -eq "FullControl" -AND $a.IdentityReference -eq "Domaine\User1"){
    		$Droit1 = "true"
    	}
    	if ($a.FileSystemRights -eq "Modify, Synchronize" -AND $a.IdentityReference -eq "Domaine\User1"){
    		$Droit2 = "true"
    	}
    	...		
    		
    }
    
    ## Pour chaque droit absent, on le rajoute:
    If ($Droit1 -eq "false"){
    	Code pour Ajout du droit
    }
    
    If ($Droit2 -eq "false"){
    	Code pour Ajout du droit
    }
    
    ...
    Vois-tu comment rendre ça plus propre ?

    Un grand merci pour ton aide toujours précieuse

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par julie75 Voir le message
    Vois-tu comment je pourrais rechercher si un droit pour un compte est présent sur mon dossier.
    Je serais tenté de parcourir les ACLs. Je dois avoir du code sur le sujet mais je n'ai pas trop le temps en ce moment.
    Ensuite il faudrait vérifier si l'ajout d'un droit existant est autorisé ou pas dans cette liste, à voir sur MSDN.
    Citation Envoyé par julie75 Voir le message
    Vois-tu comment rendre ça plus propre ?
    Je suis plus dans un optique de réutilisation de code, là tu écris un traitement spécifique. Pour moi, la notion de 'propreté' est surtout lié à la maintenance (simplicité / lisibilité / compréhension).

    Ensuite il y a de l'optimisation de code/ simplification d'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #Ne pas faire $droits="true", mais $droits=$true 
     
    $Droit1=($a.FileSystemRights -eq "FullControl") -AND ($a.IdentityReference -eq "Domaine\User1")
     
     #$Droit1 est du type un boolean
    If ($Droit1){
    Voir factoriser le code...

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Une source d'inspiration et le lien sur MSDN.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Désolé pour le lien dit d'inspiration, c'est plus de l'expiration
    Bref, je regarde ça dés que je peux, j'ai eu dernièrement à résoudre un pb similaire, il y a donc un besoin récurrent sur type de traitement.

    Je pensais plus à qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Get-Acl | 
     Remove-Acl -Target { code de vérification }|
     Set-Acl
     
    #ou
    Get-Acl | 
      Test-Acl  -Check { code de vérification }|
      Add-Acl $AccesRule -Identity $userSID |
      Set-Acl
    Il manque, je pense, qq cmdlets de manipulation d'ACL.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo