Jump to content

Berechtigungen auf Ordnerstruktu setzen - mit Ausnahmen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi,

 

der Anfang dürfte getan sein:

# Falsch ;) Danke für den Hinweis massaraksch:
gci D:\Test -Recurse | % { Write-Host $_.FullName | Where { $_.BaseName -match "Unterordern XY" -or $_.BaseName -match "Unterordner AB" } }

# Korrgiert:
gci D:\Test -Recurse | Where { ($_.BaseName -like "Unterordner XY" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner AB" -and $_.PsIsContainer) } | % { Write-Host $_.Name }

Einen "Musterordner" bauen und mit Get-ACL die Berechtiungen einlesen und anstatt des Write-Host dann ein Set-ACL.

https://technet.microsoft.com/en-us/library/2008.02.powershell.aspx bzw. https://technet.microsoft.com/de-de/library/hh849802.aspx und https://technet.microsoft.com/de-de/library/hh849810.aspx

 

Viel Erfolg.

 

Gruß

Jan

bearbeitet von testperson
Link zu diesem Kommentar

Anaconda, sprichst du vom Read-Only Attribut, oder von einem RechteSet (ACLs)?

 

Probiers mal damit:

$Exclusions = @()
$Exclusions += "Unterordner AB"
$Exclusions += "Unterordner XY"

$RootPath = "G:\Folders"

#Set the ReadOnly-Attribut
Get-ChildItem -Path $RootPath -Exclude $Exclusions -Recursive| Set-ItemProperty -Name IsReadOnly -Value $False

#or set ACLs
$DemoFolder = "G:\demo" #die Rechte dieses Folders werden dann gesetzt
$DemoRights = get-acl $DemoFolder
Get-ChildItem -Path $Path -Exclude $Exclusions -recursive | Set-Acl $DemoRights

eventuell willst du bei Get-childitem noch den "-file" oder "-directory"  setzen, wenn du nur Files oder nur Ordner verändern willst.

 

Vorher sorgfältig im Kleinen testen, dann sollte das auch ohne Consultant abgehen smile.gif

Und bei einem großen Fileserver lass nicht alle Verzeichnisse mit einem einzigen Scriptaufruf ändern, sondern "schneide den Elefanten in Scheiben".

 

blub

Link zu diesem Kommentar

@blub & alle Anderen: Vielen Dank für eure Tips.

 

Habe das Script von blub leicht angepasst. Soweit funktioniert alles bis auf die Meldung (siehe unten) Die Rechte werden jedoch trotzdem gesetzt.

 

$Exclusions = @()
$Exclusions += "Unterordner AB"
$Exclusions += "Unterordner XY"

$RootPath = "E:\Ordner"

#or set ACLs
$DemoFolder = "E:\Musterordner\" #die Rechte dieses Folders werden dann gesetzt
$DemoRights = get-acl $DemoFolder

 

Get-ChildItem -Path $RootPath -Exclude $Exclusions -recurse | Set-Acl -AclObject $DemoRights
Set-Acl : Dem Prozess fehlt die für diesen Vorgang erforderliche "SeSecurityPrivilege"-Berechtigung.
In Zeile:10 Zeichen:63
+ Get-ChildItem -Path $RootPath -Exclude $Exclusions -recurse | Set-Acl -AclObject ...
+                                                               ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (E:\Kunden\Kunde1:String) [set-Acl], PrivilegeNotHeldException
    + FullyQualifiedErrorId : System.Security.AccessControl.PrivilegeNotHeldException,Microsoft.PowerShell.Commands.SetAclCommand

 

Der Benutzer, in wessen Kontext das Script läuft, hat genügend Rechte.

 

Was habe ich übersehen?

 

Danke für euer Feedback.

 

Gruss

Link zu diesem Kommentar

Aktuell ist die Vererbung auf der Ordnerstruktur nicht konsequent aktiv.

MIt dem Script möchte ich erreichen, dass auf sämtlichen Ordner RO ist ausser auf den Exclusions.

 

Wenn ich im root RO setze und vererbe müsste das Script anschliessend nur noch auf den Exclusions-Ordner RW setzen.

Ich denke es wäre sinnvoller ein Script zu machen, welches nicht ein Musterordner referenziert sondern die Rechte direkt auf den Exclusions anpasst.

 


ich habe nun eure Tips kombiniert:

 

$Schreibrechte = Get-ACL -Path E:\Musterkunde\Rechnungen

get-ChildItem -Path E:\Kunden -Recurse | Where { ($_.BaseName -like "Unterordner1" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner2" -and $_.PsIsContainer) -or ($_.BaseName -like "Unterordner3" -and $_.PsIsContainer) } | % { Set-Acl -AclObject $Schreibrechte }

 

Die Ausgabe verlangt nun noch einen Pfad. Der Pfad sollte jedoch aus der Suche vorhin bekannt sein.

 

Cmdlet Set-Acl an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
Path[0]:

 

 

Danke für Inputs

bearbeitet von Anaconda777
Link zu diesem Kommentar

Hier mal wie wir das machen

#die notwendigen Rechte
$rechte = @{}
$rechte.add('CH',@("","Synchronize,Modify","ContainerInherit,ObjectInherit","None","Allow"))
$rechte.add('FU',@("”,”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow”))
$rechte.add('RO',@("","ReadAndExecute",”ContainerInherit,ObjectInherit","None","Allow"))


foreach ($folder  in Get-ChildItem('\\data.FOOBAR\data\') -Directory)
{
    #ACL bereinigen
    $acl = get-acl -path "\\data.FOOBAR\data\Abteilungen\S\$folder"
    $foo = $acl.Access | %{$acl.RemoveAccessRule($_)}
    $foo = Set-Acl "\\data.FOOBAR\data\Abteilungen\S\$folder" $acl

    #neue ACL setzen
    $acl = get-acl -path "\\data.FOOBAR\data\Abteilungen\S\$folder"


    foreach ($recht in "RO","CH","FU")
    {
        $GruppeL = 'DAT_L_data_'+"$folder"+'_'+"$recht"
        "$GruppeL"
        New-ADGroup -Name $GruppeL -GroupCategory Security -GroupScope domainlocal -Path "ou=,ou=Gruppen,dc=FOOBAR"

        $rechte[$recht][0] = $GruppeL
        $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule($rechte[$recht])
        $foo = $acl.AddAccessRule($accessRule)
    }
    $foo = Set-Acl "\\data.FOOBAR\data\$folder" $acl
}

Da musst du nur entsprechend Filtern wo dir Rechte gesetzt werdens sollen.

Ohne Musterordner oder ähnliches.

Die eigentliche Rechtevergabe geht dann über die AD-Gruppen. Das ist dann sauber und übersichtlich.

DIe OUs und Pfade müssen natürlich stimmen.

bearbeitet von magheinz
Link zu diesem Kommentar

Aktuell ist die Vererbung auf der Ordnerstruktur nicht konsequent aktiv.

 

 

Wenn du konsequente Vererbung haben willst, dann modifiziere die $ACL mit der Methode "SetAccessRuleProtection"

$Path="C:\Demo"
$ACL = Get-Acl $DirectoryPath
 
$ACL.SetAccessRuleProtection($True, $True)

(ich habs jetzt nur sehr schnell mal getestet!)

 

bischen in der MSDN stöbern

https://msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectsecurity.setaccessruleprotection(v=vs.110).aspx

 

 

Viele Wege führen nach Rom!

 

blub

Link zu diesem Kommentar

hier gab es das problem das viele admins staendig rechte auf mehrere 1000 ordner mit mehreren millionen dateien gesetzt haben.

immer schoen besitz uebernehmen auf alles.

daher die liebe zu (leeren) Musterbäumen.

Es kommt natürlich immer auf den Anwendungsfall an.

Bei uns werden Ordner Mit Berechtigungen IMMER durch ein Powershellscript erzeugt. Dabei werden auch immer die Domainlokalen Gruppen gebaut. Ein Admin muss sich dann nur zum Mitglied von dat_l_foobar_FU machen und hat adminrechte.

Das Rechte setzen geschieht genau ein mal. Danach ist es nur noch eine Frage der Gruppenberechtigungen ws man sogar problemlos delegieren kann.

Link zu diesem Kommentar

jojo, alles bekannt und wurde bis auf powershell auch so umgesetzt. es gab auch keine aenderungen mehr an ntfs-rechten für ca. 18 Monate.

dann kam jedoch der wunsch auf (und aus diesem wunsch wurde ein auftrag) mitten in diesem meer an daten eine ganz neue struktur zu schaffen nach anderen schemata mit gänzlich anderen zwecken.

warum mittendrin? keine ahnung, musste so sein, hiess es. Alles Klagen hatte keinen Zweck.

wenn ich da erstmal anfang zu erzaehlen hoer ich nicht mehr auf :-)

bearbeitet von Jim di Griz
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...