如何使用Windows命令行授予用户对目录的权限(读、写、修改)?


当前回答

在Vista中,不支持使用cacls。以下是前几条帮助热线:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

你应该使用icacls。这是你授予John对D:\test文件夹及其所有子文件夹的完全控制权的方式:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

根据MS文档:

F =完全控制 CI =容器继承——该标志表示从属容器将继承此ACE。 OI = Object Inherit -该标志表示从属文件将继承ACE。 /T =递归应用到现有文件和子文件夹。(OI和CI只适用于新文件和子文件夹)。图片来源:@AlexSpence。

要获得完整的文档,您可以不带参数地运行“icacls”,或者在这里和这里查看Microsoft文档

其他回答

XCACLS。VBS是一个非常强大的脚本,可以更改/编辑ACL信息。c: \ windows \ system32系统\ cscript.exe xcacls。VBS help返回所有开关和选项。

您可以从Microsoft Support Page获得官方发布

我是管理员,一些脚本在一个目录中的所有文件和子文件夹上对我的名字设置了“拒绝”权限。执行icacls“D:\test”/grant John:(OI)(CI)F /T命令没有工作,因为它似乎没有从这个列表中删除我的名字中的“拒绝”权利。

对我来说唯一有效的是用icacls的"D:\test" /reset /T命令重置所有权限。

批量文件夹创建和授予权限的工作我使用下面的powershell脚本。

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

注意:您必须在csv文件中创建相同的域用户名,否则您将遇到权限问题

在Vista中,不支持使用cacls。以下是前几条帮助热线:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

你应该使用icacls。这是你授予John对D:\test文件夹及其所有子文件夹的完全控制权的方式:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

根据MS文档:

F =完全控制 CI =容器继承——该标志表示从属容器将继承此ACE。 OI = Object Inherit -该标志表示从属文件将继承ACE。 /T =递归应用到现有文件和子文件夹。(OI和CI只适用于新文件和子文件夹)。图片来源:@AlexSpence。

要获得完整的文档,您可以不带参数地运行“icacls”,或者在这里和这里查看Microsoft文档

为了防止其他人在这个页面上出错,如果你想在一个命令中将各种权限串在一起,我使用了这个:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

请注意用于各种权限的csv字符串。