2017-01-16 3 views
0

J'ai besoin d'aide avec mon script Powershell. mon client a un énorme répertoire et j'ai besoin de changer les paramètres de sécurité.Définir le dossier, le sous-dossier et l'autorisation de fichier Set-ACL Powershell Script. La définition de l'héritage de fichier ne fonctionne pas

J'ai fait ce code ci-dessous et cela fonctionne mais j'ai un problème: L'héritage sur les fichiers ne fonctionne pas si les autorisations de sécurité sur un fichier dans le répertoire n'est pas définie.

Peut-être que quelqu'un trouvera mon erreur.

fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<Pfade> 
    <pfad name="E:\Share\TEST"> 
     <gruppe name="Domain Admins"> 
      <rechte>FullControl</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="gruppe1"> 
      <rechte>Modify</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="gruppe2"> 
      <rechte>Modify</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="gruppe3"> 
      <rechte>Modify</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="gruppe4"> 
      <rechte>Modify</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="gruppe5"> 
      <rechte>Modify</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
     <gruppe name="SYSTEM"> 
      <rechte>FullControl</rechte> 
      <aktion>allow</aktion> 
      <rechtsetzen>Add</rechtsetzen> 
     </gruppe> 
    </pfad> 
</Pfade> 

PowerShell:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted 
$scriptpath = $MyInvocation.MyCommand.Path 
$dir = Split-Path $scriptpath 
cd $dir 
# Einlesen des XML-Dokuments im aktuellen Skriptpfad (!) 
$doc = [XML](Get-Content -Path struktur.xml) 

#### Start TAKEOWN 
$Remotesystem = "\\server1" 
$Adminuser = "domain\admin" 
$yes = "Y" 
$log = "c:\Users\admin\Desktop\log.txt" 


psexec $Remotesystem 
TAKEOWN /S $Remotesystem /F $doc.Pfade.pfad.name /D $yes /R >> $log 
#### End TAKEOWN 

$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit" 
$propagation = [system.security.accesscontrol.PropagationFlags]"None" 

$doc.Pfade.pfad | ForEach-Object { 
    $FolderName = $_.name 
    $_.gruppe | ForEach-Object { 
     $pathrecht = $_.rechte 
     $pathaktion = $_.aktion 
     $pathrechts = $_.rechtsetzen 
     $pathgruppe = $_.name 
     $acl = Get-Acl $FolderName 
     $acl.SetAccessRuleProtection($True, $False) 
     $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($pathgruppe, $pathrecht, $inherit, $propagation, $pathaktion) 
     switch ($pathrechts) { 
     Add {$acl.AddAccessRule($rule)} 
     Delete {$acl.RemoveAccessRuleAll($rule)} 
     } 
     Set-Acl $FolderName $acl 
     echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt 
     $date = Get-Date -format dd.MM.yyyy-HH:mm:ss 
     $date>>log.txt 
     Get-Acl $FolderName | select Path, Owner, Group, AccessToString | Format-List >>log.txt 
     echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">>log.txt 
    } 
} 
    echo "########################################################################################">>log.txt 
    echo "########################################################################################">>log.txt 
    echo "########################################################################################">>log.txt 
cd $dir 

Les autorisations sur le dossier et Subfolder est exactement ce que je veux subfolderpermisson mais la permission sur le fichier filepermission directement ist mis pas pourquoi?

Répondre