Berechtigung auf letzten Ordner einrichten
Hallo Zusammen,
ich suche schon eine ganze Weile nach einer Lösung meines Problems und hoffe Ihr könnt mir helfen.
Ich muss auf eine Ordnerstruktur mit vielen Unterordnern schreibende Rechte nur auf den jeweils letzten Ordner einrichten.
Dies möchte ich mittels PowerShell erledigen, aber leider finde ich keinen Ansatz, wie ich den jeweiligen Datenpfad ermitteln kann.
Über Tipps würde ich mich freuen.
Marika
ich suche schon eine ganze Weile nach einer Lösung meines Problems und hoffe Ihr könnt mir helfen.
Ich muss auf eine Ordnerstruktur mit vielen Unterordnern schreibende Rechte nur auf den jeweils letzten Ordner einrichten.
Dies möchte ich mittels PowerShell erledigen, aber leider finde ich keinen Ansatz, wie ich den jeweiligen Datenpfad ermitteln kann.
Über Tipps würde ich mich freuen.
Marika
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 767357689
Url: https://administrator.de/forum/berechtigung-auf-letzten-ordner-einrichten-767357689.html
Ausgedruckt am: 08.04.2025 um 02:04 Uhr
22 Kommentare
Neuester Kommentar
Servus Marika, willkommen auf Administrator.de!
.
Spaß beiseite, könnte auch noch bedeuten das jeder Ordner der keinen Unterordner mehr hat gemeint ist.
Also liebe Marika, spezifiziere diesen "letzten Ordner" für uns doch bitte exakter
.
Grüße Uwe
Zitat von @Tezzla:
Was heißt für dich "letzter Ordner"? Der tiefste Ordner in der Struktur oder der, der zuletzt angelegt / geändert wurde?
Das frage ich mich ehrlich gesagt auch. Wenn der Ordner sich nicht benommen hat ist er auch der "letzte" Ordner Was heißt für dich "letzter Ordner"? Der tiefste Ordner in der Struktur oder der, der zuletzt angelegt / geändert wurde?
Spaß beiseite, könnte auch noch bedeuten das jeder Ordner der keinen Unterordner mehr hat gemeint ist.
Also liebe Marika, spezifiziere diesen "letzten Ordner" für uns doch bitte exakter
Grüße Uwe
@colinardo Wir wollen ja hier keine Ordnerdiskrimierung 
Sei froh das ich jetzt nicht auch noch mit Ordner*innen angefangen habe
.
@colinardo Kann man PowerShell eigentlich gendern? Wäre es Power*innenShell oder PowerShell*innen? Vielleicht wäre das auch was für Frank die Themenbezeichnungen einmal anzupassen an den aktuellen Zeitgeist.
In der Zeit warten wir auf @Marika
In der Zeit warten wir auf @Marika
"Die" Muschel ist schon weiblich, denke das sollte reichen 
Na dann (User/Gruppe) und Ordner, Rechte anpassen.
Grüße Uwe
# Ordner
$root = 'D:\Marika'
# Account
$account = 'DOMAIN\Account'
# tiefsten Ordner ermitteln
ls $root -Directory -Recurse -Force | sort {$_.Fullname.Length} -Desc | select -F 1 | %{
# ACL des Ordners ermitteln
$acl = Get-ACL $_.FullName
# zusätzliche Zugriffregel erstellen
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $account,'Modify','ContainerInherit,ObjectInherit','None','Allow'
# Bei Bedarf access rule protection setzen wenn Vererbung unterbrochen werden soll
$acl.SetAccessRuleProtection($false,$true)
# regel der ACL hinzufügen
$acl.SetAccessRule($rule)
# ACL zurückschreiben
Set-Acl $_.FullName $acl -verbose
}
Grüße Uwe
Zitat von @Marika:
Hallo Tezzla,
könntest Du mir vielleicht behilflich sein, wie ich das umsetzen kann?
Leider bin ich in PowerShell noch nicht so bewandert, dass ich ein ForEach umsetzen könnte.
In dem Fall dann bspw.Hallo Tezzla,
könntest Du mir vielleicht behilflich sein, wie ich das umsetzen kann?
Leider bin ich in PowerShell noch nicht so bewandert, dass ich ein ForEach umsetzen könnte.
# Ordner
$root = 'D:\Marika'
# Account
$account = 'DOMAIN\Account'
# erste Ebene Ordner durchlaufen
foreach ($base in (ls $root -Directory)){
# tiefsten Ordner des aktuellen basisordners ermitteln
ls $base.Fullname -Directory -Recurse -Force | sort {$_.Fullname.Length} -Desc | select -F 1 | %{
# ACL des Ordners ermitteln
$acl = Get-ACL $_.FullName
# zusätzliche Zugriffregel erstellen
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $account,'Modify','ContainerInherit,ObjectInherit','None','Allow'
# bei Bedarf access rule protection setzen wenn Vererbung unterbrochen werden soll, siehe https:{{comment_single_line_double_slash:0}}
$acl.SetAccessRuleProtection($false,$true)
# Regel der ACL hinzufügen/ersetzen
$acl.SetAccessRule($rule)
# ACL zurückschreiben
Set-Acl $_.FullName $acl -verbose
}
}

Moin Uwe,
hast du nicht etwas vergessen? Laut deiner Aussage machst du das doch immer bei lernwilligen Anfängern.
Gruß
C.C.
hast du nicht etwas vergessen? Laut deiner Aussage machst du das doch immer bei lernwilligen Anfängern.
Gruß
C.C.
Zitat von @148656:
hast du nicht etwas vergessen? Laut deiner Aussage machst du das doch immer bei lernwilligen Anfängern.
Nee, der RefLink zur Doku für eine spezielle Funktion und Kommentare sind im Code enthalten hast du nicht etwas vergessen? Laut deiner Aussage machst du das doch immer bei lernwilligen Anfängern.
Wenn ich die jedes mal posten würde ... dann ist hier Speicher bald voll ...
Zitat von @Marika:
Hallo Colinardo,
ich habe in Deinem Script nur meinen Account hinzugefügt und dann "laufen" lassen. Den Ordner auf D: gab es schon
Es gibt zwar keinen Fehler, aber leider werden auch keine Rechte hinzugefügt.
Wir kennen hier deine Ordnerbechtigungsstruktur ja nicht, der Account den du zum Ausführen verwendest muss natürlich über entsprechende Rechte in dieser Ordnerstruktur verfügen, ansonsten musst du ihm diese ja erst verschaffen, das ist oben nicht enthalten. Das Skript geht davon als Voraussetzung aus.Hallo Colinardo,
ich habe in Deinem Script nur meinen Account hinzugefügt und dann "laufen" lassen. Den Ordner auf D: gab es schon
Es gibt zwar keinen Fehler, aber leider werden auch keine Rechte hinzugefügt.
Bitte beschäftige dich damit erst einmal gründlich, wir liefern ja hier kein Fertig-Back-Rezept für alle Lebenslagen.
Powershell Link-Leitfaden für Anfänger

sry, mir sitzt heut der Schalk im Nacken :-P
Man könnte ja für das übernächste Release eine Signatur wünschen, die man bei bedarf Anheften kann.
Gruß
C.C.
Zitat von @Marika:
Die lesenden Rechte sind für die Ordnerstruktur schon vorhanden. Auch das ausführende Konto kann die Rechte hinzufügen.
Manuell die Rechte zu bearbeiten funktioniert.
Obiges Skript modifiziert die vorhandenen Rechte mit SetAccessRule(). Sollte dort also schon ein ACL-Eintrag für den angegebenen Account vorhanden sein wird dieser durch die neue Regel ersetzt und nicht hinzugefügt., ist das Principle noch nicht vorhanden wird dieses hinzugefügt. Willst du trotz vorhandener Berechtigung für den selben Account eine zusätzliche ACL hinzufügen musst du stattdessen die Funktion AddAccessRule() benutzen.Die lesenden Rechte sind für die Ordnerstruktur schon vorhanden. Auch das ausführende Konto kann die Rechte hinzufügen.
Manuell die Rechte zu bearbeiten funktioniert.
# ...
$acl.AddAccessRule($rule)
# ...
Zitat von @Marika:
Wenn ich z.B. folgende Struktur habe, dann wird nur der fett markierte Ordner geändert.
D:\Marika\3.0c\3.0.c.1abc
D:\Marika\3.0c\3.0.c.1abc-ABC
D:\Marika\3.0c\3.0.c.1abc-DASDFADF
Du wolltest ja nur den längsten/tiefsten Ordner Wenn ich z.B. folgende Struktur habe, dann wird nur der fett markierte Ordner geändert.
D:\Marika\3.0c\3.0.c.1abc
D:\Marika\3.0c\3.0.c.1abc-ABC
D:\Marika\3.0c\3.0.c.1abc-DASDFADF
Ich brauche aber auch die beiden anderen Ordner im obigen Beispiel. Könnt Ihr mir noch einen Tipp geben, wie ich auch diese Ordner erwischen kann?
Und woran machst du diese fest? Meinst du alle Ordner der tiefsten Ebene ? Wenn ja dann nimm mal das# Ordner
$root = 'D:\Marika'
# Account
$account = 'DOMAIN\Account'
# erste Ebene Ordner durchlaufen
foreach ($base in (ls $root -Directory)){
# alle Ordner der tiefsten Ebene des Basisordners ermitteln
ls $base.Fullname -Directory -Recurse -Force | group {$_.Parent.FullName} | sort Name -Descending | select -f 1 -Expand Group | %{
# ACL des Ordners ermitteln
$acl = Get-ACL $_.FullName
# zusätzliche Zugriffregel erstellen
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $account,'Modify','ContainerInherit,ObjectInherit','None','Allow'
# bei Bedarf access rule protection setzen wenn Vererbung unterbrochen werden soll, siehe https:{{comment_single_line_double_slash:0}}
$acl.SetAccessRuleProtection($false,$true)
# Regel der ACL hinzufügen/ersetzen
$acl.SetAccessRule($rule)
# ACL zurückschreiben
Set-Acl $_.FullName $acl -verbose
}
}
Du merkst es ist wichtig wie man spezifiziert, für das nächste mal also bitte gleich exakt mit allen Bedingungen spezifizieren damit wir hier x mal anfangen müssen, das ist ja nicht Sinn und Zweck.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Grüße Uwe