[W2003R2] Rechten zetten op folder structuur met icacls

Pagina: 1
Acties:

  • sko
  • Registratie: November 1999
  • Laatst online: 30-03-2025
Hoi,

Ik ben bezig met het omzetten van de rechten op een folder structuur naar een group-based access via een script, maar ik kan nergens vinden of het commando icacls hetzelfde kan doen als een vinkje zetten bij "Replace all existing inheritable permissions on all descendants with inheritable permissions from this object"

of is er een andere manier om dit te doen vanuit een script?

de folder structuur moet er namelijk zo uit zien qua rechten:

level1: group based read access (all level groups read+write en all level groups read en level2 groups read-only)
level2: group based read access en group base write access ( per level2-folder een andere group)
level3 en verder: reset security naar inheritance van level2 folders

Het probleem zit dus bij de level3 folders, hier moet ik de rechten van resetten zodat ze de rechten van het level erboven hebben. En dat gebeurt niet als ik de rechten van level2 verander en inheritance aanzet. Aangezien het aantal level2 folders enorm is, wil ik dit niet met de hand doen door een vinkje te zetten bij "Replace all existing inheritable....."

Ik hoop dat het zo duidelijk is :) heeft iemand een idee hoe ik dit kan doen?

voor de duidelijkheid, het script wat ik gemaakt het staat hieronder, de bedoeling is dat het script de ACL groepen aanmaakt in Active Directory op basis van de folder-naam en de rechten op de betreffende folders erop zet zonder de huidige ACL's weg te halen, vanwege migratie naar de nieuwe rechtenstructuur.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION
echo -------------------------------------------------------------
set /P drive=What should be the drive? :
set /P base-dir=What should be the base-directory? :

rem scan dept dirs
for /f "delims=," %%a in ('dir "%drive%\%base-dir%\" /aD /B') do (

rem add acl-group to domain
net localgroup "ACL-%%a-all-R" /ADD /domain 
net localgroup "ACL-%%a-all-RW" /ADD /domain

rem Scan dept-subdirs,1 level deep
for /f "delims=," %%b in ('dir "%drive%\%base-dir%\%%a" /aD /B' ) do (
rem add acl-subgroup to domain
net localgroup "ACL-%%a-%%b-R" /ADD /domain
net localgroup "ACL-%%a-%%b-RW" /ADD /domain

rem remove inheritance and copy current acl's on dir
icacls "%drive%%base-dir%\%%a\%%b" /inheritance:d

rem add new acl's on department dir
cacls "%drive%%base-dir%\%%a" /E /P "domainname\ACL-%%a-%%b-R":R

rem add new subdir-acl's on department's subdir
cacls "%drive%%base-dir%\%%a\%%b" /E /P "domainname\ACL-%%a-%%b-RW":C
cacls "%drive%%base-dir%\%%a\%%b" /E /P "domainname\ACL-%%a-%%b-R":R
cacls "%drive%%base-dir%\%%a\%%b" /E /P "domainname\ACL-%%a-all-RW":C

rem add new global acl for on department's subdir
cacls "%drive%%base-dir%\%%a\%%b" /E /P "domainname\ACL-%%a-all-R":R
cacls "%drive%%base-dir%\%%a\%%b" /E /P "domainname\ACL-%%a-all-RW":C
cacls "%drive%%base-dir%\%%a" /E /P "domainname\ACL-%%a-all-R":R
cacls "%drive%%base-dir%\%%a" /E /P "domainname\ACL-%%a-all-RW":C
)
)
pause

[ Voor 43% gewijzigd door sko op 21-09-2009 17:48 ]


  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Uit de inline documentatie van icacls:
inheritance rights may precede either form and are applied
only to directories:
(OI) - object inherit
(CI) - container inherit
(IO) - inherit only
(NP) - don't propagate inherit

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • sko
  • Registratie: November 1999
  • Laatst online: 30-03-2025
alt-92 schreef op maandag 21 september 2009 @ 18:57:
Uit de inline documentatie van icacls:

Inheritance rights may precede either form and are applied
only to directories:
(OI) - object inherit
(CI) - container inherit
(IO) - inherit only
(NP) - don't propagate inherit
Ik was hier mee aan het stoeien geweest, maar blijkbaar had ik iets fout gedaan, het werkt nu wel met het commando icacls "%drive%%base-dir%\%%a\%%b" /inheritance:D(OI)(CI).

Maarr.. zodra ik deze in de loop erbij zet, krijg ik de volgende foutmelding: (OI was unexpected at this time. wat nogal logisch is gezien de ( & ) in het commando (wie verzint dit als parameters?), enig idee hoe ik dit kan omzeilen?

  • sko
  • Registratie: November 1999
  • Laatst online: 30-03-2025
gevonden:

voor de FOR-loop:
code:
1
echo icacls %%1 ^/inheritance:D^(IO^)^(OI^)^(CI^) >icacls-io.cmd


in de batchfile icacls-io.cmd staat nu:
code:
1
icacls %1 /inheritance:D(IO)(OI)(CI)


en dan in de loop:
code:
1
call icacls-io.cmd "%drive%%base-dir%\%%a\%%b"


en de output is dan keurig:
code:
1
 icacls "w:\folder\subfolder\subsubfolder" /inheritance:D(IO)(OI)(CI)

[ Voor 19% gewijzigd door sko op 22-09-2009 15:24 ]