ricson
Goto Top

Icacls u takeown Berechtigungen Besitzer auf Unterordner vererben

Hallo,

ich möchte den Besitz und die Berechtigungen von einem Ordner auf seine Unterordner "kopieren".

mit takeown und icacls.
im Vb Skript sieht das ungefähr so aus:

Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & """")
Process.Start("C:\Windows\System32\cmd.exe", "/k icacls " & pfad & " /inheritance:r /grant:r Admin: (IO)(OI)(CI)F /t)

Der Zugriff wird trotzdem verweigert.

Ich habe mich auch noch mal über die cmd Hilfe zu icacls und takeown belesen, aber ich bekomme nicht die Berechtigung, Rechte zu ändern, für die jeweiligen Unterordner.

Hat jemand eine Idee?

Danke

Content-ID: 373250

Url: https://administrator.de/forum/icacls-u-takeown-berechtigungen-besitzer-auf-unterordner-vererben-373250.html

Ausgedruckt am: 22.04.2025 um 05:04 Uhr

136037
136037 07.05.2018 aktualisiert um 11:28:55 Uhr
Goto Top
Dann hast du die Hilfe zu den Befehlen nicht vollständig gelesen, erstens brauchst du zusätzlich die Option /D Y (oder bei Deusch ein J) damit Fragen mit Ja beantwortet werden. Zweitens musst du das rekursiv erledigen es fehlt also die Option /R.

Also alles erst mal selbst alles auf der Konsole testen bevor du zu VB übergehst!

Und Grundlagen zu NTFS ACLs wären hier dringend mal nachzuholen!!
Kraemer
Kraemer 07.05.2018 um 11:39:02 Uhr
Goto Top
Moin,
Zitat von @ricson:
Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & """")
Process.Start("C:\Windows\System32\cmd.exe", "/k icacls " & pfad & " /inheritance:r /grant:r Admin: (IO)(OI)(CI)F /t)
warum gehst du hier den Umweg über die cmd.exe?

Gruß
ricson
ricson 07.05.2018 aktualisiert um 11:48:33 Uhr
Goto Top
hi qaboos,

ok mit Deiner Hilfe bin ich jetzt ein Schritt weiter -> /R /D J wird nun ausgeführt und der Administrator ist nun auch Besitzer der Unterordner.
Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & ci.Name & """ /R /D J")
Process.Start("C:\Windows\System32\cmd.exe", "/k icacls " & pfad & ci.Name & " /grant Administrator: (CI)(OI)(F)")


System.IO.Directory.Delete(pfad & ci.Name, True) -->Trotzdem wird hier der Zugriff verweigert.
136037
136037 07.05.2018 aktualisiert um 11:58:30 Uhr
Goto Top
Wundert mich nicht, wer arbeitet schon als der "Administrator" .-) Lach ...
Pfeif dir erst mal die NTFS Grundlagen rein, dann kannst du wieder kommen.

warum gehst du hier den Umweg über die cmd.exe?
Was anderes scheint er offensichtlich noch nicht zu verstehen.
ricson
ricson 07.05.2018 aktualisiert um 13:12:58 Uhr
Goto Top
...

Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & ci.Name & """ /R /D J")
Process.Start("C:\Windows\System32\cmd.exe", "/k icacls " & pfad & ci.Name & " /grant Admin: (CI)(OI)(F)")

bis hier klappt es -> "Admin" bekommt den Besitz.
System.IO.Directory.Delete(pfad & ci.Name, True) --> Löschen funktioniert nicht, obwohl der Besitz und Berechtigung (Vollzugriff) vorhanden sind.

@ Kraemer
mit Deinem Link (MS Hilfeseite) von gestern, hatte ich es nicht hinbekommen - aber ich bin offen für alles, man lernt ja nie aus face-smile
136037
136037 07.05.2018 aktualisiert um 14:14:09 Uhr
Goto Top
Nun Process.Start() erstellt einen neuen Prozess aber eben asynchron deswegen führst du beide Prozesse zur selben Zeit aus ohne das sie aufeinander warten! Da ist der Grund warum das so in der Art nicht funktionieren kann da beide Befehle ja aufeinander aufbauen und der andere ohne Abschluss des anderen nicht funktioniert. Mach also hinten dran noch ein .WaitForExit() und es klappt face-wink, vorausgesetzt der gerade angemeldete User ist der User "Admin".

Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & ci.Name & """ /R /D J").WaitforExit()  
Process.Start("C:\Windows\System32\cmd.exe", "/k icacls """ & pfad & ci.Name & """ /grant Admin:(CI)(OI)F /t /c").WaitForExit()  
System.IO.Directory.Delete(pfad & ci.Name, True)
Ab und zu die Doku lesen hilft da ungemein wenn man neu in der Materie ist.
ricson
ricson 08.05.2018 um 08:41:45 Uhr
Goto Top
Hallo qaboos,

die Prozesse werden nun nacheinander ausgeführt - es kommt jeweils die Meldung erfolgreich.
Wenn man sich die Ordner über die Eigenschaften anschaut, sind diese im Besitz des aktuellen Users.

Der Delete Vorgang wird unterbrochen, sobald versucht wird - einen Unterordner aus dem Profilordner zu löschen.

Den Code habe ich noch mal etwas angepasst:

ci.name übergibt den aktuellen User

 
              Process.Start("C:\Windows\System32\cmd.exe", "/k takeown /F """ & pfad & ci.Name & """ /R /D J").WaitForExit()  
              Process.Start("C:\Windows\System32\cmd.exe", "/k icacls " & pfad & ci.Name & " /grant " & ci.name & ":(CI)(OI)(F) /T /C").WaitForExit()  
              System.IO.Directory.Delete(pfad & ci.Name, True)

per Hand Profilordner löschen funktioniert.
136037
Lösung 136037 08.05.2018 aktualisiert um 09:23:27 Uhr
Goto Top
Der Delete Vorgang wird unterbrochen,
Heißt was???

Funktioniert hier einwandfrei, obwohl ich eher mit /reset /t /c bei icacls arbeite.

Starte die App elevated.
ricson
ricson 08.05.2018 um 10:12:45 Uhr
Goto Top
irgendetwas mache ich noch falsch ... hier mal die Meldung:

bild1



...
Starte die App elevated.

das hatte ich schon in den Einstellungen gesetzt, falls Du das meintest:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
136037
136037 08.05.2018 aktualisiert um 10:51:08 Uhr
Goto Top
Da fehlen doppelte Anführungszeichen und den Pfad!

Ich bin raus. Keine Ahnung wo das Problem bei dir liegt, hier geht's.
ricson
ricson 08.05.2018 um 11:17:49 Uhr
Goto Top
Trotzdem Danke für Deine Geduld!