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 :

Matrice de droits


Sujet :

Scripts/Batch

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Matrice de droits
    Bonjour à tous,

    Suite à un besoin spécifique auquel je ne trouve aucune réponse je dois m'initier à PowerShell. n'étant pas développeur je galère dans la création de mon code... Je ne trouve pas comment le commencer, et je viens implorer votre aide...

    Je cherche a créer un matrice récapitulative des droits AD des certains utilisateur mon annuaire. Voici un exemple de ce que je souhaite faire:

    User1 est membre de Gr_A, Gr_B, Gr_C
    User2 est membre de Gr_A, Gr_D,_
    User3 est membre de Gr_A, Gr_E, Gr_F

    Je souhaite avoir en sortie un document CSV me permettant de mettre en forme un tableau du style:

    Donc deux dimension 7x4

    Nom : pic.png
Affichages : 574
Taille : 3,2 Ko

    Je n'ai aucune idée de comment dimensionner mon tableau et le remplir. Est-ce que vous pouvez m'instruire?

    Merci d'avance.

  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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    la liste d'utilisateurs semble connu avant l'interrogation dans l'AD, mais est-ce que les noms de groupes et leur nombres sont inconnus à ce moment là ?
    C'est à dire que le contenu de ton rapport doit s'adapter à chaque interrogation de l'AD sans avoir à modifier le script, c'est bien ça ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Janvier 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Absolument.
    La liste des utilisateurs peut être connue, mais effectivement le nom des grimpes ainsi que leur nom est inconnu.
    Le tableau doit s'adapter en fonction du nombre de groupes disponibles dans la sélection d'utilisateurs.

  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
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Une possible ébauche de solution.
    Le code suivant est de niveau avancé, il utilise le dynamisme de Powershell (version 5.1), ce code crée du code (rien de mieux pour débuter n'est-ce pas ;-) ).

    Je suis partie sur l'idée de construire le CSV final à partir d'une liste d'objet de structure identique.
    La structure que tu cites est une liste de liste, une liste d'utilisateur et chacun posséde une liste de groupes.
    N'ayant pas d'AD sous la main, ce code ne contient pas l'extraction des données initiales. Il faut donc soit l'adapter à la structure des objets de l'AD soit transformer les objets de l'AD dans la structure utilisée ( cf. New-UserInfo)

    Code powershell : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #----------Function
    #New-PSCustomObjectFunction -Noun UserInfo -Parameters Name,Groupe -File
    Function New-UserInfo{
     #crée un objet User de test
    param(
             [Parameter(Mandatory=$True,position=0)]
            [string]$Name,
     
             [Parameter(Mandatory=$True,position=1)]
            [string[]]$Groupe
    )
     
      [pscustomobject]@{
        PSTypeName='UserInfo';
        Name=$Name;
        Groupe=$Groupe;
       }
    }# New-UserInfo
     
    Function New-PSCustomObjectFunctionGroupe {
        #crée une fonction génèrant un objet personnalisé simple
        #tous ses paramètresne sont pas typé
        #
        # Par défaut génère du code sans la signature du mot clé Function
        # Le paramètre -FILE génére du code avec la signature du mot clé Function
        # Le paramètre -AsPSVariableProperty génére un objet dont 
        #  les propriétés sont basées sur la classe PSVariableProperty. Requière le module PSObjectHelper
     
      param(
           [Parameter(Mandatory=$true,position=0)]
           [ValidateNotNullOrEmpty()]
          $Noun,
           [Parameter(Mandatory=$true,position=1)]
           [ValidateNotNullOrEmpty()]
          [String[]]$Parameters,
          [switch] $File,
          [switch] $AsPSVariableProperty 
      )
    $ofs=' '
    $Borne=$Parameters.count-1
    $code=@"
    #Requires -version 3
     
    $(if ($AsPSVariableProperty) {"#Requires -Modules PSObjectHelper"})
    $(if ($File) {"Function New-$Noun{"})
    param(
        $(For ($I=0;$I -le $Borne;$I++)
          { $Name=$Parameters[$I]
            @"
    `t [Parameter()]
    `t`$${Name}$(if ($I -Ne $borne) {",`r`n"})
    "@
          } 
         )     
    )
     $( if ($AsPSVariableProperty) 
        {
    @'  
      $O=[pscustomobject]@{
           PSTypeName=$Noun
         }
      $PSBoundParameters.GetEnumerator()|
       Foreach {
         $O.PSObject.Properties.Add( (New-PSVariableProperty $_.Key $_.Value -ReadOnly) ) 
       }
     $O
    '@
       }
       else
       { 
         "`r`n  [pscustomobject]@{`r`n"
         "   PSTypeName='$Noun';"
      $( $Parameters|
         Foreach {
          "`r`n    {0}=`${1};" -F $_,$_
         }
       ) 
      "`r`n   }"
       }#else 
      ) 
     
    $(if ($File) {"`r`n}# New-$Noun"})
    "@
    $Code
    }#New-PSCustomObjectFunctionGroupe
    Code powershell : 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
     
    #--------Datas
     #crée un tableau de test
    $Users=@(
       $(New-UserInfo User1 @('Gr_A', 'Gr_B', 'Gr_C'))
       $(New-UserInfo User2 @('Gr_A', 'Gr_D'))
       $(New-UserInfo User3 @('Gr_A', 'Gr_E', 'Gr_F'))
    )
     
    #------- Traitement
     #On récupère tous les noms de groupes dupliqués 
     #l'usage de la classe HashSet nécessite de typer le tableau $Liste
    [String[]]$Liste=$Users.Groupe
     
     #On crée un structure de données contenant des noms de groupes uniques 
    $Groupes=[System.Collections.Generic.HashSet[String]]::New($Liste,[StringComparer]::InvariantCultureIgnoreCase)
     
     
    # Construction de la liste des paramètres de la fonction 'New-GroupeInfo'
    [string[]]$ParametersName= @("Name") #userName
    $ParametersName += $Groupes
     
    # création dynamique d'une fonction simple.
    # La liste de ses paramètres évolue dynamiquement.
    $Code=New-PSCustomObjectFunctionGroupe -Noun GroupeInfo -Parameters $ParametersName
    new-item -Path 'function:\' -Name 'New-GroupeInfo' -Value $code -Force > $null
     
     
    $Users|% {
      #Crée une hashtable Clé=Valeur
     $Parameters=@{}
     # Ajoute dynamiquement des clés, 
     # Ces noms de clés sont les noms de paramètres de la function 'New-GroupeInfo'
     $Parameters.Add('Name',$_.Name)
     $_.Groupe| %{
       $Parameters.Add("$_",$True)          
      }
     #Appel de la fonction avec le Splatting :
     # le paramètrage la fonction se fait via une hashtable 
     New-GroupeInfo @Parameters
    }|Format-Table
     
    #le résultat est un tableau d'objets
    #Ici on le formate pour un affichage sur la console
     
    # Name  Gr_A Gr_B Gr_C Gr_D Gr_E Gr_F
    # ----  ---- ---- ---- ---- ---- ----
    # User1 True True True
    # User2 True           True
    # User3 True                True True

    Points restant :
    Maintenance ?
    Norme de nommage des noms de groupe AD ?
    Après l'import dans XL , que contiennent les cellules vident (null, EmtpyString ,0 ...) ?

Discussions similaires

  1. [Débutant] réalisation d'une matrice à partir d'équations de droite
    Par Korithov dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/04/2015, 13h59
  2. trouver les valeurs d'une droite dans une matrice
    Par Liloucha dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/05/2014, 17h24
  3. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44
  4. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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