Partage
  • Partager sur Facebook
  • Partager sur Twitter

gestion des droits NTFS

Comment mettre des droits NTFS à partir d'un fichier CSV

    1 février 2022 à 19:12:55

    Bonjour,

    Je crée actuellement des serveur windows virtuel "à la chaine". J'en ai 14 à faire. Pour chaque machine virtuelle, je monte un disque dur D: (Data) sur lequel je crée une arborescence de dossiers avec des droits NTFS précis.

    Mettre les droits NTFS prend vraiment beaucoup de temps. Comme les 14 disques virtuel D: auront la même arborescence et les mêmes droits, j'ai récupéré grace à un petit script powershell les droits NTFS, du premier disque que j'ai fait, dans un fichier CSV.

    En revanche, je ne trouve pas le moyen, à partir de ce fichier CSV de faire la manip dans l'autre sens.

    Tout est virtuel, donc fichier: je pourrais copier le fichier du DDur D: mais les noms de domaine étant differents cela me donne des erreurs.

    Et surtout cela ne me dit pas comment utiliser powersell. Si l'on peut exporter les droits NTFS dans un fichier CSV, on doit pouvoir les importer de la même façon, non ?

    Si quelqu'un à la réponse... Merci beaucoup

    Patricia

    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2022 à 2:37:48

      Salut,
      Si je comprend bien, ton problème n'est pas d'allouer les droits NTFS. Ça tu sais comment le faire.
      C'est plutôt de lire le fichier en format CSV et d'exécuter automatiquement les commandes appropriées.
      Je ne crois pas que ce soit facile avec les scripts .bat ou .cmd d'extraire les champs de ton fichier CSV.
      Voici ttout de même un lien qui pourrait t'aider à manipuler les chaînes de ton fichier:


      https://www.dostips.com/DtTipsStringManipulation.php#Snippets.SplitString


      Je n'utilise pas PowerShell sur Windows mais plutôt cmd.
      Sais-tu comment programmer en Python? Je crois qu'il y a un module CSV dans ce langage.
      (on peut même passer à côté de ce module)
      Je te donne un script qui faisait autre chose, mais tu risques de rencontrer des problèmes semblables:
      -
      @echo off
      :: Ce script recherche un dossier dont le nom commence par "Py" et le renomme "Python2"
      for /f "tokens=*" %%d in ('dir /a:d /b') do (
          setlocal enabledelayedexpansion
          set debut=%%d
          set debut=!debut:~0,2!
          if "!debut!" equ "Py" (
              ren %%d Python2
          )
          endlocal
      )
      -
      Voici un autre script pour lire les favoris de Internet Explorer et les convertir en lien html:
      -
      @echo off
      set orig=%userprofile%\Favorites
      set dest=%userprofile%\Documents\Web-Pages
      set file=%dest%\Favoris-ie.html
      rem del %file%
      cd %orig%
      for /f "tokens=*" %%p in ('dir /a-d /b') do (
      type "%%p" | sed -e "/^URL=/!d;s/^URL=/<a href=\"/;s/$/\">/" >> %file%
      echo %%p | sed -e "s+.url *$+</a>+" >> %file%
      )
      cd %src%

      -
      Edité par PierrotLeFou 2 février 2022 à 2:40:33

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        2 février 2022 à 7:48:33

        Bonjour et merci pour ta réponse.

        En fait j'ai un fichier csv avec 4 colonnes : Namefolder, ADGrouporUser, Permission, Inherited.

        Je souhaiterai creer un scrip qui lit les lignes une par une et qui affecte au dossier NameFolder, les droit NTF (nom,permission,heritage) grâce au trois autres colonnes.

        En powershell, bach ou python, peu importe.

        En tout les cas merci pour tes scripts. II me servirons toujours.

        Patricia

        • Partager sur Facebook
        • Partager sur Twitter
          2 février 2022 à 8:41:05

          Es-tu certaine que tu as Python sur ton ordi?
          Pour t'en assurer:
          Control+R > cmd > where python > exit
          Tu devrais obtenir quelque chose du genre:
          C:\Users\Administrateur\AppData\Local\Microsoft\WindowsApps\python.exe
          J'ai d'autres versions de Python sur mon ordi, mais celle-là devrait suffire.
          Je peux appeler python soit sur cmd soit sur PowerShell.
          Je te poste le script Python dès que j'aurai le temps.
          Peux-tu me donner le format de tes commandes?
          Tu devras enregistrer le script dans ton dossier de travail avec le suffixe  *.py
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            2 février 2022 à 14:06:47

            Bonjour,

            Oui j'ai python sur mon PC et je code dans "Visual studio code" s'il le faut. Je gère essentiellement du réseau et du système et code assez rarement sauf pour tenter d'automatiser des taches répétitives.

            Voilà le script qui m'a permis de récupérer les droits NTFS dans un fichier CSV:

            $FolderPath = dir -Directory -Path "D:\" -Recurse -Force
            $Report = @()
            Foreach ($Folder in $FolderPath) {
                $Acl = Get-Acl -Path $Folder.FullName
                foreach ($Access in $acl.Access)
                    {
                        $Properties = [ordered]@{'FolderName'=$Folder.FullName;'ADGroup_or_User'=$Access.IdentityReference;
                        'Permissions'=$Access.FileSystemRights;'Inherited'=$Access.IsInherited}
                        $Report += New-Object -TypeName PSObject -Property $Properties
                    }
            }
            $Report | Export-Csv -path "d:\Permissions.csv"

            C'est un script trouvé sur internet. Je sais qu'il existe un module PowerShell NTFSSecurity, qui pourrait permettre de gérer les droits mais je ne trouve pas d'information pour l'automatisation à partir d'une base de donnée (fichier csv). Je ne trouve que des infos pour mettre ou enlever les droits en ligne de code. Ce qui serait aussi long que le faire en mode graphique...

            Merci beaucoup pour le temps que tu passes à me répondre.

            -
            Edité par Proscene 2 février 2022 à 14:07:43

            • Partager sur Facebook
            • Partager sur Twitter
              3 février 2022 à 2:55:02

              Voici le script Python et le lien vers le module csv.

              https://docs.python.org/fr/3.6/library/csv.html

              Je ne suis pas familier avec la commande net share, j'ai donc placé les deux possibilités.
              On ne peut pas faire de  cd D:/  si notre disque système est C:
              Si le nom de disque n'est pas mentionné dans le nom de dossier, j'ai prévu de le placer (voir disk)
              On peut séparer les sous-dossiers avec '\' ou '/' ou même mélanger les deux. Windows l'accepte.
              Dans ton exemple, les quatre champs comportaient un espace après la virgule. J'espère que ce n'est pas la même chose dans ton fichier CSV.

              Tu auras le message: KeyError: 'ADGrouporUser'
              Tu pourras placer le script dans le dossier de ton choix pourvu que tu saches comment y accéder avec cmd.

              Pour appeler cmd en mode administrateur: Control+R > cmd > Shift+Control+Enter
              Supposons que le script s'appelle script.py et le fichier fichier.csv, tu devras taper en invite de commande (cmd):
              python script.py fichier.csv
              Note que le suffixe n'a pas besoin d'être '.csv', j'ai testé avec '.t' (non standard)
              -
              import os   # Module pour commandes système.
              import sys   # Module pour la ligne de commande.
              import csv   # Module pour fichier CSV.
              # Extraire les paramètres de la commande.
              params = sys.argv
              csvfile = params[1]   # Nom du fichier à lire.
              # Nom du disque si pas dans le fichier.
              disk = 'D:/'
              #disk = ''   # Si le disque est mentionné.
              # Lire le fichier CSV
              with open(csvfile, newline='') as file:
                  reader = csv.DictReader(file)
                  for row in reader:
                      # Si les paramètres sont invoqués par mot clé:
                      os.system(f"net share Namefolder={disk+row['Namefolder']} ADGrouporUser={row['ADGrouporUser']} Permission={row['Permission']} Inherited={row['Inherited']}")
                      # Si les arguments sont positionels:
                      #os.system(f"net share {disk+row['Namefolder']} {row['ADGrouporUser']} {row['Permission']} {row['Inherited']}")

              -
              Edité par PierrotLeFou 3 février 2022 à 3:49:59

              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                3 février 2022 à 9:25:27

                Bonjour,

                Merci beaucoup.

                Je vais tester tout cela et te tiendrais au courant des resultats obtenus.

                Si cela fonctionne, j'essayerai de traduire python en powershell !!!

                tout un programme....

                Patricia

                • Partager sur Facebook
                • Partager sur Twitter

                gestion des droits NTFS

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown