testperson 1.708 Geschrieben 4. November 2016 Melden Teilen Geschrieben 4. November 2016 (bearbeitet) 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 5. November 2016 von testperson Zitieren Link zu diesem Kommentar
massaraksch 41 Geschrieben 4. November 2016 Melden Teilen Geschrieben 4. November 2016 Hi, der where-Filter kommt da etwas spät, oder? :cry: 1 Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 4. November 2016 Melden Teilen Geschrieben 4. November 2016 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 Und bei einem großen Fileserver lass nicht alle Verzeichnisse mit einem einzigen Scriptaufruf ändern, sondern "schneide den Elefanten in Scheiben". blub Zitieren Link zu diesem Kommentar
Anaconda777 0 Geschrieben 7. November 2016 Autor Melden Teilen Geschrieben 7. November 2016 @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 $DemoRightsSet-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 Zitieren Link zu diesem Kommentar
testperson 1.708 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 Starte die PowerShell mal "Als Administrator". Also rechte Maustaste auf die PowerShell Verknüpfung und dann "Als Administrator ausführen". Jetzt das Script darin ausführen. Zitieren Link zu diesem Kommentar
Anaconda777 0 Geschrieben 7. November 2016 Autor Melden Teilen Geschrieben 7. November 2016 (bearbeitet) ein Problem habe ich noch, wenn in einem Unterordner die Vererbung der Rechte unterbrochen wurde, ändert das Script die Rechte auf diesen Ordner nicht. Die Vererbung sollte überall aktiv sein ausser auf den Exclusions. Danke fürs Feedback. Gruss Anaconda bearbeitet 7. November 2016 von Anaconda777 Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 Das mit der Vererbung würde ich nicht so machen. Setzte doch im root alle auf RO und nur in den Spezialfällen RW. Sie Rechte addieren sich und du musst die Vererbung nicht unterbrechen. Zitieren Link zu diesem Kommentar
Anaconda777 0 Geschrieben 7. November 2016 Autor Melden Teilen Geschrieben 7. November 2016 (bearbeitet) 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\Rechnungenget-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 1Geben Sie Werte für die folgenden Parameter an:Path[0]: Danke für Inputs bearbeitet 7. November 2016 von Anaconda777 Zitieren Link zu diesem Kommentar
testperson 1.708 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 Hi, "-Patch $_.FullName" sollte den verlangten Pfad liefern. Gruß Jan Zitieren Link zu diesem Kommentar
Anaconda777 0 Geschrieben 7. November 2016 Autor Melden Teilen Geschrieben 7. November 2016 @Jan perfekt, so funktioniert es einwandfrei. Danke Danke an @Alle Helfer Gruss Anaconda Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 (bearbeitet) 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 7. November 2016 von magheinz Zitieren Link zu diesem Kommentar
Jim di Griz 13 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 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. Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 7. November 2016 Melden Teilen Geschrieben 7. November 2016 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 Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 8. November 2016 Melden Teilen Geschrieben 8. November 2016 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. Zitieren Link zu diesem Kommentar
Jim di Griz 13 Geschrieben 8. November 2016 Melden Teilen Geschrieben 8. November 2016 (bearbeitet) 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 8. November 2016 von Jim di Griz Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.