none
import csv - depuis tableau excel RRS feed

  • Question

  • Bonjour

    je débute en script powershell .

    Dans le cadre d'une automatisation de la gestion des dossiers et droit associés à partir d'un tableau .

    je met une image du tableau afin de vous expliquer ce que je cherche a faire.

    en résumé a gauche j'ai les colonne nom , prénom, login, pour identifier les users  puis commence la gestion des dossiers .

    par la suite les lettre E=écriture x=pas d'accès  L= lecture seront liées à des groupes de sécurités nommés comme le dossier de niveau2 de la colonne (administration, appel a projet,finance ,juridique) 

    le but est de créer les dossiers et groupe de sécurité avec le script. Dans l'exemple direction est un dossier et administration un dossier enfant (direction\administration) 

    Mon problème c'est  de géré l’arborescence, je doit pouvoir gérer les colonne comme variable sur 2 ligne et  ensuite j'ai  les données de droit.

    la sorti de mon CSV donne ceci :

    ;;;;Direction;;;
    Nom;Prenom;Login;id;Administration;Appel à projet;Finance;Juridique 
    dupont;jack;;;E;E;X;E
    dupond;fred;;;X;X;X;X
    tartenpion;fabrice;;;X;E;X;X

    je ne sais pas comment traiter  la partie dossier ou du moins comment assigner les variables dans ce cas précis .

    je peux donner plus de précision si vous le souhaitez.

    en espérant ne pas être trop bouillon dans les explication .

    merci d'avance pour votre aide :)


    mardi 13 août 2019 08:37

Toutes les réponses

  • Tout d'abord, il ne faut pas vouloir réinventer la roue...
    Un CSV, c'est:

    • Une ligne de type (optionnelle)
    • Une ligne de nom de propriétés, séparée par un séparateur choisis (par défaut la virgule ou le point virgule)
    • Une ou plusieurs ligne de valeurs, utilisant le même séparateur, quel qu'il soit.

    Alors, au lieu de partir vers la méthode "Pourquoi faire simple quand on peut faire compliqué", il te faut simplifier ta feuille Excel, qui doit respecter le format CSV. (ou tu créés un nouveau format, tu es libre de le faire)

    Je passe volontairement le fait que tu pourrais utiliser un array imbriqué dans ton CSV, comme simple valeur.

    Donc, dans ton cas, ton Excel devrait ressembler à ceci:

    N’oublie ces petites choses quand tu importes ton CSV:

    1. Utilise le paramètre -Encoding UTF8, à cause des accents
    2. Utilise le paramètre -Delimiter ";" car PowerShell utilise la virgule par défaut.
    3. Évites les accents dans les noms de propriétés (même si ils sont bien gérés)

    Cela fait, après l'import du CSV, tu le traites dans une boucle qui fera ce que tu veux.

    B.

    mercredi 14 août 2019 08:50
  • Bonjour

    Merci pour votre réponse. je suis effectivement en train de gérer une version simplifier avant de trouver mieux. Pour l'instant je ne gère qu'un seul niveau au lieu de 2 comme souhaitez. Effectivement dans ce cas proposé gérer les variables est simple. je posais la question au cas ou quelque chose existait afin de gérer la problématique .

    vous semblez parler d'un "un array imbriqué dans ton CSV" de quoi s'agit 'il ?

    bonne journée

    Salutations

    Jérôme

    mercredi 14 août 2019 13:32
  • @Jérome5600

    Sérialise tes besoins/questions. Ils sont :

    > Création des répertoires (l'arborescence) : de quoi ai-je besoin pour créer un répertoire

    > Création des groupes pour les permissions NTFS et peuplement : de quoi ai-je besoin pour créer des gorupes AD ?

    > Pose des groupes en permissions sur les répertoires : de quoi ai-je besoin pour poser des permissions.

    Avant de commencer, une remarque : Dans ta copie d'écran je vois ... Jack, Fred, Fabrice.

    Gardes toujours en mémoire :

    • On ne doit pas accorder des permissions à des users, mais à des groupes.
    • N'accorder, autant que possible, que les permissions Standards (Lire/executer, Modifier) et réserver le Controle Total aux groupes d'administration.

    Si tu prends cela en compte, tu vas pouvoir revoir et couper ton fichier excel en 2

    • Groupes de sécurité AD et membres
    • Nom de répertoires à créer et arborescence
    $Groups= Import-Csv -Path \\Pathto\SecGroup.csv -Delimiter ";" -Encoding UTF8
    $Path = "ou=groupes,[...] dc=contoso,dc=com"
    foreach ($group in $Groups)
        {
        Write-Verbose "creating $($group.name) in ActiveDirectory"
        New-ADGroup -Name $group.Name -Description $group.Description -GroupScope DomainLocal -GroupCategory Security -Path $Path
        Write-Verbose "Adding member $($group.Members) to $($group.name)"
        Add-ADGroupMember -Identity $group.Name -Members $group.Members
        }

    Ton fichier Group.csv doit donc comprendre les en-têtes suivants : Name, Description (c'est pas obligatoire, mais c'est quand même mieux quand les groupes sont commentés), Members (tous les SAMs dans la même cellule)

    ex. :

    Name Description Members
    Direction-Administration-R Groupe d'accès au partage \\server\partage\Direction\Administration en lecture/Exécution Jdupont,Ftartenpion
    Direction-Administration-RW Groupe d'accès au partage \\server\partage\Direction\Administration en Modification Fdupont

    Les groupes d'accès aux ressources doivent être de des groupes locaux de domaine(Best-practices). Ces groupes peuvent être peuplés soit avec des comptes utlisateurs, soit avec des groupes globaux de domaine (entre autres).

    Imagines alors : tu crées un groupe global Direction et un autre groupe ChefsDeProjets que tu peuples avec des users. Appelles-les Groupes Organisationnel si ça t'aide, car cela correspond à l'organisation de l'entreprise. Ensuite sur le Répertoire Direction\Administration tu poses les groupes d'accès aux ressources (R et RW) comme ci-dessus. Ne reste plus qu'à peupler les groupes d'accès aux ressources (locaux) par les groupes globaux (organisationnels).

    Ca semble plus difficile à implémenter ? Non pas plus ! Et surtout ça présente les avantages suivants :

    • chaque utilisateur sera membre de moins de groupes, dont token kerberos moins gros (MaxTokenSize pour ceux auxquels ça rappelle quelque chose)
    • Ca facilite l'administration. Un nouveau "directeur" ? Je l'ajoute dans le groupe Direction et je sais qu'il aura accès à toutes les ressources auquelles accèdent le groupe Direction sans me poser 20 000 questions (toujours garder en tête : K.I.S.S. : Keep it Simple and Secure)

    A ce stade tes groupes seront créés et peuplés. Tu pourras facilement le vérifier ainsi :

    Get-ADGroupMember -Identity MonGroupe  | Select-Object -Property Name, SamAccountNam

    Pour la création des arborecences, même principe : Une boucle foreach, et New-Item et Add-NTFSAccess

    Import-Module NTFSSecurity
    foreach ($folder in $folders) 
        {
        Write-verbose "creating $($folder.fullName)"
        New-Item -Path $folder.FullName -ItemType Directory -force
        Write-Verbose "Adding NTFS permissions on $($folder.fullName)"
        Add-NTFSAccess -Path $folder.fullName -Account $folder.group -AccessRights $folder.AccessRights -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles
        }

    Comme tu le vois dans ton fichier d'entrée, il ne doit y avoir que FullName, group et AccessRights

    FullName Group AccessRights
    \\server\partage\Direction\Administration Direction-Administration-R ReadAndExecute
    \\server\partage\Direction\Administration Direction-Administration-RW Modify

    Nota : Pour poser les permissions NTFS je te conseille le module NTFSSecurity qui est bien plus friendly user que la cmdlet de base Set-Acl.

    Utilise Get-Ntfsaccess pour vérifier et exporter dans un .csv le résultat

    Get-NTFSAccess -Path C:\Temp Path: C:\Temp (Inheritance enabled) Account Access Rights Applies to Type IsInherited InheritedFro m ------- ------------- ---------- ---- ----------- ------------ ASUS10\Olivier FullControl ThisFolderSubfoldersAn... Allow False BUILTIN\Administrateurs FullControl ThisFolderSubfoldersAn... Allow True C: AUTORITE NT\Système FullControl ThisFolderSubfoldersAn... Allow True C: BUILTIN\Utilisateurs ReadAndExe... ThisFolderSubfoldersAn... Allow True C: AUTORITE NT\Utilisateurs authent... Modify, Sy... ThisFolderOnly Allow True C: AUTORITE NT\Utilisateurs authent... Delete, Ge... SubfoldersAndFilesOnly Allow True C:

    Oliv

    ----------------

    Mark if helpful


    lundi 26 août 2019 15:46