2017-10-12 12 views
1

J'ai écrit un petit script pour me donner les ACL d'accès d'un certain chemin et de tous ses sous-répertoires et les mettre dans un fichier .txt, mais j'en ai besoin dans un autre format pour créer une base de données.Comment obtenir FileSystemRights dans un certain format?

Une partie de la sortie ressemble à ceci:

 
Fullname S   FileSystemRights S AccessControlType 
----------   ------------------ ------------------ 
C:\temp ; ReadAndExecute, Synchronize ;    Allow; 

Alors ce que je dois la sortie pour ressembler à quelque chose comme ceci:

 
Fullname S FileSystemRights S AccessControlType 
---------- ------------------ ------------------ 
C:\temp ; ReadAndExecute ;    Allow; 
C:\temp ; Synchronize ;    Allow; 

Comme vous pouvez le voir, je besoin des droits individuels lignes individuelles et non empilés ensemble.

Ce que je l'ai fait regarde loin est le suivant, peut-être il aide (je suis parti des trucs sans importance):

(Get-Acl $TestPath).Access | 
    Format-Table -AutoSize -HideTableHeaders @{L="Fullname";E={$TestPath}}, 
     @{L="S";E={";"}}, FileSystemRights, 
     @{L="S";E={";"}}, AccessControlType, 
     @{L="S";E={";"}}, IdentityReference, 
     @{L="S";E={";"}}, IsInherited, 
     @{L="S";E={";"}}, InheritanceFlags, 
     @{L="S";E={";"}}, PropagationFlags | 
    Out-File $Out -Append -Width 500 

function RecDirs { 
    $d = $Args[0] 
    $AktRec++ 
    $dirs = dir $d | where {$_.PsIsContainer} 
    if ($AktRec -lt 3) { 
     foreach($di in $dirs) { 
      if ($di.FullName -ne $null) { 
       (Get-Acl $di.Fullname).Access | 
        Format-Table -AutoSize -HideTableHeaders @{L="Fullname";E={$di.FullName}}, 
         @{L="S";E={";"}}, FileSystemRights, 
         @{L="S";E={";"}}, AccessControlType, 
         @{L="S";E={";"}}, IdentityReference, 
         @{L="S";E={";"}}, IsInherited, 
         @{L="S";E={";"}}, InheritanceFlags, 
         @{L="S";E={";"}}, PropagationFlags | 
        Out-File $Out -Append -Width 500 
      } 
      RecDirs($di.Fullname) 
     } 
    } 
} 

RecDirs($TestPath) 
+2

Jetez un oeil à export-csv – guiwhatsthat

Répondre

2

de Split la propriété FileSystemRights à des virgules et la sortie d'une ligne par élément. Et vous voulez absolument Export-Csv pour écrire le fichier de sortie.

(Get-Acl $di.Fullname).Access | ForEach-Object { 
    foreach ($val in ($_.FileSystemRights -split ', ')) { 
     $_ | Select-Object @{n='Fullname';e={$di.FullName}}, 
      @{n='FileSystemRights';e={$val}}, AccessControlType, 
      IdentityReference, IsInherited, InheritanceFlags, 
      PropagationFlags 
    } 
} | Export-Csv $Out -NoType -Append 
+0

bonne réponse, merci beaucoup! –