none
NTFS Vererbung abschalten

    Question

  • Guten Tag,

    ich habe folgende Problem. Man hat ein Ordner mit viele Unterordner mit Dateien in jede Unterordner. Ich möchte gerne auf oberste Ordner "Vererbbare Berechtigungen des übergeordneten Objektes einschließen" deaktivieren, dann Rechte für bestimmte User setzen, und dann "Bestehende vererbbare Berechtigungen aller untergeordneten Objekte durch vererbbare Berechtigungen dieses Objekts ersetzen" aktiveiren, damit die neue Rechte für alle untergeordnete Objekte übernommen werden.

    http://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85

    Habe ich schon angeschaut.

    Get-Item .\Data -Recurse | Disable-Inheritance   - Funktioniert gar nicht, es muss warscheinlich Get-ChildItem stehen statt Get-Item

    Get-ChildItem .\Data -Recurse | Disable-Inheritance funktioniert nur für Files, Ordner werden nicht geändert.

    Tuesday, July 17, 2012 12:39 PM

Answers

All replies

  • Ja! Der Befehl scheint nur auf Dateien zu Arbeiten!
    Wenn ich den Befehl auf ein Verzeichnis setze bekomme ich die Fehlermeldung:
    Disable-Inheritance : Das Objekt des Typs "System.IO.DirectoryInfo" kann nicht in Typ "System.IO.FileInfo" umgewandelt werden.

    Um die Vererbung bei Ordner zu unterbrechen Siehe hier:
    3.2.2.3 Vererbung unterbrechen
    http://www.powershellpraxis.de/Datei-und-Verzeichnisberechtigungen.1174.0.html

    Beispiel:

    #Deaktivieren von: Vererbbare Berechtigungen des übergeordneten Objektes einschließen

    # Verzeichniss auf dem die vererbung ausgeschaltet werden soll $DirectoryPath="C:\Temp\Test" # Bestehenden Rechte übernehmen $ACL = Get-Acl $DirectoryPath # Vererbung ausschalten $ACL.SetAccessRuleProtection($True, $True) # veränderte Acl zurückschreiben Set-Acl $DirectoryPath $ACL


    "Bestehende vererbbare Berechtigungen aller untergeordneten Objekte durch vererbbare Berechtigungen dieses Objekts ersetzen" brauchst du nicht Aktivieren da ja immernoch alle Untergeordneten Objekte von diesem Ordner erben !

    "Bestehende vererbbare Berechtigungen aller untergeordneten Objekte durch vererbbare Berechtigungen dieses Objekts ersetzen"
    Macht eigentlich nichts anderes als JEDE Datei und JEDEN Ordner zu besuchen. Dabei werden alle ACLs gelöscht und die Vererbung wird eingeschaltet.

    # Bestehende vererbbare Berechtigungen aller untergeordneten Objekte durch vererbbare Berechtigungen dieses Objekts ersetzen

    # Verzeichnis von dem die Dateien und Verzeichnisse Erben sollen $DirectoryPath="C:\Temp\Test" # Alle Dateien und Verzeichnisse durchlaufen Get-ChildItem $DirectoryPath -Recurse | ForEach-Object { # ACL einlesen $ACL = Get-ACL $_.FullName # jede einzelne ACE löschen (Get-Acl $_.FullName).Access | ForEach-Object { # ACL enfernen $null=$ACL.RemoveAccessRule($_) } # end ForEach-Object # Vererbung einschalten $ACL.SetAccessRuleProtection($False, $False) # veränderte Acl zurückschreiben Set-Acl $_.FullName $ACL } # end Get-ChildItem ForEach-Object



    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    Tuesday, July 17, 2012 1:27 PM
  • Ist gefixt...

    Wenn noch irgend etwas nicht geht, dann bitte noch einmal melden. Danke!


    -Raimund

    Thursday, July 19, 2012 5:43 PM
  • Sorry ich komme bisschen weiter. Ich versuche mit dem Script Vererbung abschalten und Sicherheit durch ein User ersetzen und es klappt irgendwie nicht.

    $RuleAdm = New-Object System.Security.AccessControl.FileSystemAccessRule(("BUILTIN\Administrators","FullControl", "ContainerInherit, ObjectInherit", "Inheritonly", "Allow"))
    
    
    foreach ($file in $(Get-ChildItem $StartingDir -recurse)) 
    {
      
      $ACL = Get-Acl $file.FullName
      $ACL.SetAccessRuleProtection($True, $False)
      $ACEs = $ACL.GetAccessRules($True, $False, [System.Security.Principal.NTAccount])
      
      foreach ($ACE in $ACEs)
      {
    
    	  	
    	  $ACL.RemoveAccessRuleAll($ACE)
    	  
    
      }
    
      $ACL.AddAccessRule($RuleAdm)
      Set-Acl $File.Fullname $ACL
    
    }
    

     
    Friday, July 20, 2012 11:51 AM
  • Das geht einfacher:

    Get-Item .\TestFolder | Add-Access -Account builtin\administrators -AccessRights FullControl -AppliesTo ThisFolderSubfoldersAndFiles
    Get-Item .\TestFolder | Disable-Inheritance

    Und hier der umgekehrte Weg: Löschen aller explizit vergebenen ACEs und aktivieren der Vererbung:

    Get-Item .\TestFolder | Enable-Inheritance -RemoveExplicitAccessRules


    -Raimund


    Friday, July 20, 2012 12:13 PM