NTFS: in den ACLs rekursiv einen Benutzer hinzufügen
Auf unserem Firmen-Fileserver sollte ein Benutzer zusätzlich berechtigt werden, das NTFS zu lesen.
Das Problem: Wenn man bei einem Startverzeichnis die Rechte gibt, wird dieses dann soweit nach unten vererbt, bis es auf irgendenem Verzeichnis andere Rechte gibt. So ist im Basisverzeichnis der Zugang für alle Mitarbeiter, einige Ebenen tiefer sind Projektordner, Protokolle, … verschiedenste Ordner halt. Bei jedem einzelnen Projektordner stoppt also der Vererbungsmechanismus und man muss bei jedem dieser Projektordner den Benutzer erneut hinzufügen.
Das wollte ich nicht von Hand und hunderten von Klicks erledigen.
Die nachfolgende Batchdatei sucht ab einem Startverzeichnis rekursiv alle Verzeichnisse (dir /s /b [Verzeichnis]).
Auf jedem Verzeichnis wird iacls aufgerufen (das zeigt die Berechtigungen an) und in der Ausgabe wird geschaut, ob der User bereits drin ist.
Ist der User nicht drin, gibt es einen Aufruf für die subroutine addUser. Dort wird der Benutzer (rekursiv) hinzugefügt und auf ein Return gewartet (aber das nur zur Kontrolle).
@echo off rem ====================================================================== :: :: Skript zum Hinzufuegen eines einzelnen Users in die bestehenden :: ACLs :: :: ---------------------------------------------------------------------- :: 2015-01-22 Axel Hahn rem ====================================================================== set line=------------------------------------------------------------------------------- set mydir=nas-blabla\irgend\wo set cuser=DOMAIN\newuser echo. echo %line% echo user %cuser% hinzufuegen in %mydir% echo %line% for /F "tokens=*" %%a in ('dir /b /s /a:d %mydir%') do ( echo ... %%a icacls "%%a" | findstr "%cuser%" >nul || call :addUser "%%a" ) echo. echo fertig. timeout /t 100 exit :addUser echo ...... adding %cuser% icacls %1 /grant "%cuser%":(OI)(CI)(RX) set /p dummy=Return
Weiterführende Links