如何在Windows中使用命令行向用户授予目录权限?

How to grant permission to users for a directory using command line in Windows?

如何使用Windows命令行向目录(读取,写入,修改)上的用户授予权限?


从Vista开始,不推荐使用cacls。这是第一批帮助热线:

1
2
3
4
C:\\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

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

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

根据做MS文档:

  • F =完全控制
  • CI =容器继承-此标志指示从属容器将继承此ACE。
  • OI =对象继承-此标志指示从属文件将继承ACE。
  • /T =递归应用于现有文件和子文件夹。 (OICI仅适用于新文件和子文件夹)。信用:@AlexSpence发表评论。

有关完整的文档,您可以不带任何参数运行" icacls",或在此处和此处查看Microsoft文档。


您也可以使用ICACLS。

授予用户组对文件夹的完全控制权限:

1
>icacls"C:\\MyFolder" /grant Users:F

授予C:\\MyFolder的IIS用户"修改"权限(如果需要,IIS可以将文件读/写到特定文件夹中):

1
>icacls"C:\\MyFolder" /grant IIS_IUSRS:M

如果您做ICACLS /?您将能够看到所有可用选项。


打开命令提示符,然后执行以下命令:

icacls"c:\\somelocation\\of\\path" /q /c /t /grant Users:F

F提供完全访问权限。

/q /c /t将权限应用于子文件夹。

注意:有时"以管理员身份运行"会有所帮助。


使用cacls命令。在此处查看信息。

CACLS files /e /p {USERNAME}:{PERMISSION}

Where,

/p : Set new permission

/e : Edit permission and kept old permission as it is i.e. edit ACL instead of replacing it.

{USERNAME} : Name of user

{PERMISSION} : Permission can be:

R - Read

W - Write

C - Change (write)

F - Full control

For example grant Rocky Full (F) control with following command (type at Windows command prompt):

C:> CACLS files /e /p rocky:f

Read complete help by typing following command:

C:> cacls /?


我尝试以下方式,它对我有用:
1.打开cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4. del *.* /S /Q

这样文件就可以成为我自己的访问权限,并将其分配给"删除",然后我可以删除文件和文件夹。


损坏的权限:重新获得对文件夹及其子对象的访问权限

尽管大多数回复该问题的答案都有其优点,但恕我直言,它们都没有提供完整的解决方案。如果您由于损坏的权限设置而无法锁定文件夹,则以下(可能是)Windows 7的完美解决方案:

1
icacls"c:\\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T

对于Windows 10,必须在/remove:d选项之后指定用户/ SID:

1
icacls"c:\\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T


笔记:

  • 该命令将应用于指定目录。

  • 指定用户"每个人"设置了最大可能的权限,因为它包括每个可能的用户。

  • 选项" / remove:d"删除可能存在的任何明确的DENY设置,因为这些设置将覆盖明确的ALLOW设置:创建新ALLOW设置的必要前提。这仅是一种预防措施,因为通常不存在任何DENY设置,但是比后悔更安全。

  • 选项" / grant"创建一个新的ALLOW设置,一个显式权限替换(":r")可能存在的任何和所有显式ALLOW设置。

  • 参数" F"(即创建的权限)使它成为FULL控制权的授予者。

  • " / T"参数添加递归,将这些更改应用于指定目录中的所有当前子对象(即文件和子文件夹)以及文件夹本身。

  • 参数"(OI)"和"(CI)"也添加了递归,将这些更改应用于随后创建的子对象。

  • 增编(2019/02/10)-

    上面的Windows 10命令行是今天向我建议的,就在这里。我还没有Windows 10对其进行测试,但是如果有请尝试一下(然后请在下面发表评论)。

    更改仅涉及删除DENY设置作为第一步。可能没有任何DENY设置,因此该选项可能没有任何区别。我的理解是,在Windows 7上,您不需要在/ remove:d之后指定用户,但是我对此可能是错的!

    附录(2019/11/21)-

    astark用户建议用* S-1-1-0代替Everyone,以使命令独立于语言。我只有英文安装的Windows,因此无法测试该建议,但这似乎是合理的。


    我为此苦苦挣扎了一段时间,仅将这个线程中的答案组合起来对我来说很有效(在Windows 10上):
    1.打开cmd或PowerShell,然后转到包含文件的文件夹
    2.拥有/ R / F。
    3. icacls * / T / grant dan:F

    祝好运!


    以防万一在此页面上遇到其他任何人,如果您想在一个命令中将各种权限串在一起,我使用了以下方法:

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

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


    使用Excel vba脚本配置和创建帐户。我需要授予该工具使用我们的管理员" x"帐户向新用户创建的文件夹和子文件夹的完全权限。

    cacls看起来像这样:
    cacls \ FileServer \ Users \ Username / e / g Domain \ Username:C

    我需要将此代码迁移到Windows 7及更高版本。我的解决方案结果是:

    icacls \ FileServer \ Users \ Username / grant:r域\ Username:(OI)(CI)F / t

    / grant:r-授予指定的用户访问权限。权限替换了以前授予的显式权限。如果没有:r,权限将添加到任何先前授予的显式权限中

    (OI)(CI)-此文件夹,子文件夹和文件。

    F-完全访问

    / t-遍历所有子文件夹以匹配文件/目录。

    这给了我一个服务器上的文件夹,用户只能看到该文件夹??并创建子文件夹,以便他们可以读写文件。以及创建新文件夹。


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

    您可以从Microsoft支持页面获得官方发行版


    通过使用以下powershell脚本,可以创建大容量文件夹并授予权限。

    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
    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文件中创建相同的域用户名,否则会出现权限问题


    我是管理员,一些脚本在目录中所有文件和子文件夹的名称上都设置了"拒绝"权限。执行icacls"D:\\test" /grant John:(OI)(CI)F /T命令无效,因为它似乎并没有从此列表中删除我名字中的" Deny"。

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


    1
    2
    attrib +r +a +s +h <folder name> <file name> to hide
    attrib -r -a -s -h <folder name> <file name> to unhide


    关键点C?lin Darie

    我有很多脚本可以使用cacls,我将它们移到icacls
    我怎么找不到脚本来更改根挂载卷示例:d:\ datafolder。我最终创建了以下脚本,该脚本将卷安装为临时驱动器,然后应用sec。然后卸载它。这是我发现可以更新根安装安全性的唯一方法。

    1将文件夹安装GUID转换为临时文件,然后读取GUID以将其作为临时驱动器X挂载该卷:应用sec并记录更改,然后仅从X:驱动器卸载该卷,因此已挂载的文件夹不会被更改或中断然后应用秒。

    这是我的脚本示例:

    1
    2
    3
    **mountvol"d:\\%1" /L >tempDrive.temp && FOR /f"tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I
    D:\\tools\\security\\icacls.exe  %~2 /grant domain\\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
    if exist x:\\*.* mountvol X: /d**

    在Windows 10中无法使用" c:>"和">"

    例如:

    1
    2
    3
    F = Full Control
    /e : Edit permission and kept old permission
    /p : Set new permission

    cacls"file or folder path" /e /p UserName:F

    (这也修复了错误2502和2503)

    cacls"C:\\Windows\\Temp" /e /p UserName:F


    这对我有用:

  • 手动打开拒绝访问的文件夹。

  • 在该文件夹中选择"可执行文件/应用程序"文件。

  • 右键单击它,然后转到Properties-> Compatibility

  • 现在查看Privilege Level并检查其以管理员身份运行

  • 单击所有用户的更改设置。

  • 现在问题已解决。