使用icacls在“所有子文件夹和文件”上授予修改权限,但仅将“读取”设置为顶层文件夹

我们的Windows服务器上有一些用户文件夹上有一些相当搞砸的权限。 我想要SYSTEMDomain Admins完全控制所有文件夹。 我希望用户只能在顶级文件夹(这是他们的主文件夹)上只读,并在所有子文件夹和文件上进行修改。 这可以很容易地通过GUI来完成,但我不知道如何编写脚本

我从PowerShell脚本调用icacls,因为get-acl和set-acl是主要的PITA。 如果我必须使用它们,我并不反对,但是我认为调用icacls会更容易。 这是我所需要的相关代码:

 icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)' icacls.exe $folder /grant 'SYSTEM:(OI)(CI)(F)' icacls.exe $folder /grant '$domain\domain admins:(OI)(CI)(F)' 

正如你所看到的,我正在给用户修改icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)' 。 我无法弄清楚如何使修改只应用于子文件夹和文件,同时授予只读的顶级文件夹。

所需的权限结构如下所示(只是为了清楚):

 -Users --M ---Marra (read only to me) ----Documents (Modify) ----Scripts(Modify) ----Etc (Modify) 

什么是正确的icacls语法,或者我怎么能在PS本身与set-acl?

将脚本的第一行更改为以下内容,使其仅适用于子文件夹和文件。

 icacls.exe $folder /grant '$domain\$user:(OI)(CI)(IO)(M)' 

然后将其应用到顶层文件夹。

 icacls.exe $folder /grant '$domain\$user:(R)' 

授予可inheritance的修改权限,并设置不可删除的拒绝来删除文件夹本身:

 icacls folder /deny user:d icacls folder /grant user:(oi)(ci)m 

这给了他们在文件夹内的完整权限,但他们不能修改文件夹本身。

 icacls $folder /c /grant $domain\$user:(OI)(CI)(X,RD,RA,REA,WD,AD,WA,WEA,DC,RC) 

这会授予对所有文件和子目录的MODIFY访问权限,但不会删除对$文件夹本身的访问权限。