Ordnerberechtigung per Batch - Powershell - Script auf Home- und Profileshare
Guten Abend liebe Mitleidenden,
ich suche nach einem Script, welches mir Anhand einer AD-Abfrage oder Liste die Berechtigungen einer Filestruktur wieder gerade biegt.
Gegeben ist ein Fileserver, Windows 2003 mit einer Share für Profile und Usershare. (Ich weiß, das trennt man... unwissende Kollegen).
D:\pc_user
Darunter befinden sich die Usershare mit Achtstelliger Personalnummer sowie Personalnummer.V2 für das Profil.
like: 12345678 und 12345678.V2
800 Nutzer in etwa und dementsprechend die Ordner...
Besagte Kollegen haben nun die Berechtigungen von oben "Durchgebügelt" (mit Jeder:Vollzugriff) und nun ist natürlich jeder Ordner für Jeden ensehbar.
Das geht ja mal gar nicht...
Also wie bekomme ich nun die Kuh vom Eis... (habe leider gerade keinen Praktikanten)
Ich dachte an einem Script, welches eine AD-Abfrage macht (Powershell) und die Ordner jeweils rekursiv mit dem Entsprechenden User + Administratoren inkl. Vererbung berechtigt.
Hatte jemand schon so ein Problem und das irgendwie gelöst?
have fun
nother
ich suche nach einem Script, welches mir Anhand einer AD-Abfrage oder Liste die Berechtigungen einer Filestruktur wieder gerade biegt.
Gegeben ist ein Fileserver, Windows 2003 mit einer Share für Profile und Usershare. (Ich weiß, das trennt man... unwissende Kollegen).
D:\pc_user
Darunter befinden sich die Usershare mit Achtstelliger Personalnummer sowie Personalnummer.V2 für das Profil.
like: 12345678 und 12345678.V2
800 Nutzer in etwa und dementsprechend die Ordner...
Besagte Kollegen haben nun die Berechtigungen von oben "Durchgebügelt" (mit Jeder:Vollzugriff) und nun ist natürlich jeder Ordner für Jeden ensehbar.
Das geht ja mal gar nicht...
Also wie bekomme ich nun die Kuh vom Eis... (habe leider gerade keinen Praktikanten)
Ich dachte an einem Script, welches eine AD-Abfrage macht (Powershell) und die Ordner jeweils rekursiv mit dem Entsprechenden User + Administratoren inkl. Vererbung berechtigt.
Hatte jemand schon so ein Problem und das irgendwie gelöst?
have fun
nother
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 273350
Url: https://administrator.de/contentid/273350
Ausgedruckt am: 08.11.2024 um 05:11 Uhr
20 Kommentare
Neuester Kommentar
Hallo nother,
Auf die Schnelle kommt mir soetwas in den Sinn:
Es ersetzt mittels cacls die ACLs aller Ordner und berechtigt den dazugehörigen User mit Vollzugriff.
Es geht sicher deutlich schöner, aber um mal den Anfang zu machen...
Beste Grüße
Dominique
Auf die Schnelle kommt mir soetwas in den Sinn:
cd D:\pc_user
Get-ChildItem "*.V2" | Foreach-Object {
Start-Process cmd -ArgumentList "/K", "cacls", ("""" + $_.FullName + """"), "/t", "/g", ($Env:USERDOMAIN + "\" + ($_.Name.Split(".")) + ":f");
Start-Process cmd -ArgumentList "/K", "cacls", ("""" + ($_.FullName.Replace(".V2", "")) + """"), "/t", "/g", ($Env:USERDOMAIN + "\" + ($_.Name.Split(".")) + ":f");
}
Es geht sicher deutlich schöner, aber um mal den Anfang zu machen...
Beste Grüße
Dominique
Du könntest zum Beispiel noch eine weitere Start-Process Anweisung reinsetzen:
Im Zuge dessen am besten noch nach Besitzer schauen. Schau dir dazu einfach mal die Cacls-Doku an.
Beste Grüße
Dominique
Start-Process cmd -ArgumentList "/K", "cacls", ("""" + ($_.FullName.Replace(".V2", "")) + """"), "/t", "/g", ($Env:USERDOMAIN + "\" + """Domain Admins"":f";
Im Zuge dessen am besten noch nach Besitzer schauen. Schau dir dazu einfach mal die Cacls-Doku an.
Beste Grüße
Dominique
Ja, ich suche im äußeren block nur nach Verzeichnissen mit v2, um zu vermeiden, dass die Dinge doppelt durchgeführt werden und auf andere Ordner, die eventuell gar nicht mit einbezogen werden sollen.
Nächster versuch wäre, zu prüfen ob sich der ordnername in einen integer wandeln lässt und daran zu gehen.
Andernfalls einfach alle Ordner abgrasen und für jeden prüfen, ob ein User mit dem Namen existiert.
Nächster versuch wäre, zu prüfen ob sich der ordnername in einen integer wandeln lässt und daran zu gehen.
Andernfalls einfach alle Ordner abgrasen und für jeden prüfen, ob ein User mit dem Namen existiert.
Ja klar, oder
Sollte gehen.
Das von dir verlinkte Script macht auch einen guten Eindruck. Du könntest natürlich im Vorhinein eine Liste anfertigen, aus der du die V2-Ordner händisch entfernst und dann soetwas verwenden. Das mit dem Usernamen lässt sich auch anpassen.
Ansonsten nimm einfach die If-Abfrage.
Beste Grüße
Dominique
if( -NOT ($_.Name.Split(".")[1] == "V2")){tuh was...}
Das von dir verlinkte Script macht auch einen guten Eindruck. Du könntest natürlich im Vorhinein eine Liste anfertigen, aus der du die V2-Ordner händisch entfernst und dann soetwas verwenden. Das mit dem Usernamen lässt sich auch anpassen.
Ansonsten nimm einfach die If-Abfrage.
Beste Grüße
Dominique
Hallo Nother,
Icacls ist nicht besonders komplex. Andernfalls lässt sich das ganze auch "nativ" in powershell umsetzen. Set-acl ist das Zauberwort.
Die cacls Aktion war ja nur ein schneller vorschlag.
Wenn du Interesse an einem ps script dieser Art hast, kann ich es morgen auch mal angehen. Ist ja kein seltenes vorhaben.
Ansonsten wäre es super, wenn du deine Lösung dann auch mit uns teilst. Das steigert den Mehrwert natürlich ungemein
Beste Grüße
Dominique
Icacls ist nicht besonders komplex. Andernfalls lässt sich das ganze auch "nativ" in powershell umsetzen. Set-acl ist das Zauberwort.
Die cacls Aktion war ja nur ein schneller vorschlag.
Wenn du Interesse an einem ps script dieser Art hast, kann ich es morgen auch mal angehen. Ist ja kein seltenes vorhaben.
Ansonsten wäre es super, wenn du deine Lösung dann auch mit uns teilst. Das steigert den Mehrwert natürlich ungemein
Beste Grüße
Dominique
Hi,
Also, ich würde wohl eher dazu tendieren...
Von den Schnipseln hat man aber länger etwas. Angepasst können die sicher in einigen Situationen hilfreich sein.
Ich schaue morgen mal...
Dito
Ein wenig stört mich auch die Dos-Box... wenn ich das nun auf das Echte Verzeichnis los lasse, müsste ich 487 Fenster schliessen...
Dann muss der /K Parameter aus dem cmd-Aufruf raus. Der war Absicht. War ja erstmal ein schneller Test.Also, ich würde wohl eher dazu tendieren...
- Ein Batch-File mit For Schleife für icacls oder
- Ein PS-Script mit Set-Acl
- VBS?
Von den Schnipseln hat man aber länger etwas. Angepasst können die sicher in einigen Situationen hilfreich sein.
Ich schaue morgen mal...
Dito
Ja klar!
Die replace Aktion stammt daher, dass ich davon ausging, du hast Ordner mit und ohne v2. Deswegen suchen wir nur nach denen mit v2 im Namen, um doppeltes anwenden zu vermeiden nehmen in der ersten Ausführung (jetzt aber die einzige, da du die andere nicht brauchsr) aber das v2 mit replace raus, um aber aich die anderen uu treffen. Den ordnernamen missbrauchen wir im splitting als usernamen. An sich auch nir ein abschneiden des v2 teils. Es teilt den string 12345.v2 in zwei strings. Einmal vor dem punkt, also 12345 und einmal nach dem Punkt. Also v2.
Dahinter der Index um das erste Element, also 12345 zu verwenden.
Wenn du den /k Parameter wegnimmst schließt sich das dos Fenster nach Ausführung des befehls.
Nochmal zur Notiz:
Foreach fuhoden block nicht für jeden OrdnerNamen aus, sonder. Für das repräsentierende Objekt. $_.Fullname stellt den Pfad des Objekts dar. Das Objekt hat aber auch weitere Eigenschaften.
Hoffe, das hat etwas Licht ins dunkle gebracht. Entschuldige die fehlende Formatierung und eventuelle Tippfehler. Bin mim Handy drin.
Beste Grüße
Dominique
Die replace Aktion stammt daher, dass ich davon ausging, du hast Ordner mit und ohne v2. Deswegen suchen wir nur nach denen mit v2 im Namen, um doppeltes anwenden zu vermeiden nehmen in der ersten Ausführung (jetzt aber die einzige, da du die andere nicht brauchsr) aber das v2 mit replace raus, um aber aich die anderen uu treffen. Den ordnernamen missbrauchen wir im splitting als usernamen. An sich auch nir ein abschneiden des v2 teils. Es teilt den string 12345.v2 in zwei strings. Einmal vor dem punkt, also 12345 und einmal nach dem Punkt. Also v2.
Dahinter der Index um das erste Element, also 12345 zu verwenden.
Wenn du den /k Parameter wegnimmst schließt sich das dos Fenster nach Ausführung des befehls.
Nochmal zur Notiz:
Foreach fuhoden block nicht für jeden OrdnerNamen aus, sonder. Für das repräsentierende Objekt. $_.Fullname stellt den Pfad des Objekts dar. Das Objekt hat aber auch weitere Eigenschaften.
Hoffe, das hat etwas Licht ins dunkle gebracht. Entschuldige die fehlende Formatierung und eventuelle Tippfehler. Bin mim Handy drin.
Beste Grüße
Dominique