在 Windows 中递归删除写权限?

在 Windows 中递归删除写权限?

旧的 Windows 2003 盒子里装着即将停用的共享文件夹。有一个共享文件夹,该文件夹内每个用户都有一个文件夹。每个文件夹都已将该用户添加到具有完全权限的安全性中。然后任何用户都可以在该文件夹下创建子文件夹……

我想让他们只能在退役前的下个月读取他们的文件夹。因此删除每个用户的完全和写入权限。

在 Linux 中,这将是 chmod -R 550 。(之前有类似 770 的命令)

看起来 CACLS 就是我想要在 Windows 世界中使用的东西,但看起来你必须为其指定一个用户名。我不能只剥夺 * 的写入权限。因此,我需要在 Windows 2003 机器上使用某种递归批处理脚本来读取数千个文件夹的用户名、文件并修改该用户名的文件权限。

这看起来很令人头痛,即使它有效(我不相信它不会破坏一切)。

有没有更简单的方法?例如,如果我为根文件夹的所有人对象添加了权限并拒绝其写入权限,这是否会优先于下面的用户个人权限?或者有没有一种方法可以在不定义脚本中的每个用户/文件夹的情况下剥夺写入权限?

答案1

一种方法是授予组Domain Users对父文件夹的适当权限,并选中Replace all existing inheritable permissions on all descendants with inheritable permissions from this object父文件夹的高级安全设置中的复选框。这将用父文件夹的权限替换所有子文件夹的权限。

答案2

我相信我已经找到了一个合适的、不复杂的脚本,能够满足我的需要。

for /F "tokens=1,2,3 delims=:" %%i in (fixacl.lst) do xcacls d:\share\%%i /T /g CONTOSO\%%i:R Administrators:F /Y

这应该采用用户名列表(或目录列表,因为每个目录都有一个关联的用户,反之亦然,1:1)并以域\用户名:只读和管理员:完全控制递归方式覆盖权限。由于它基于列表,因此我不必担心具有不同名称的子目录。

在粗略的伪代码中......

For each line in the file fixacl.lst
Grab the name and set it to the variable %%i
then xcalcs on the directory of that name
With xcalcs options for recursive and replace
Read Only for that user
Full control for the administrator
and Yes to everything

答案3

最简单的答案是更改共享本身的权限。将用户组或用户单独(如果用户以这种方式添加到共享)从现有权限更改为读取权限。

相关内容