如何使用Windows中的命令行为用户授予权限?

时间:2010-05-28 11:59:07

标签: windows command-prompt file-permissions

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

17 个答案:

答案 0 :(得分:361)

从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 = Container Inherit - 此标志表示从属容器将继承此ACE。
  • OI = Object Inherit - 此标志表示从属文件将继承ACE。
  • /T =递归应用于现有文件和子文件夹。 (OICI仅适用于新文件和子文件夹)。信用:@AlexSpence评论。

要获得完整的文档,您可以在没有参数的情况下运行“icacls”或查看Microsoft文档herehere

答案 1 :(得分:69)

您也可以使用ICACLS。

用户完全控制授予文件夹:

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

C:\MyFolder的IIS用户授予修改权限(如果您需要IIS能够将R / W文件存入特定文件夹):

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

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

答案 2 :(得分:18)

使用cacls命令。请参阅信息here

  

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

     

其中,

     

/ p:设置新权限

     

/ e:编辑权限并保留旧权限,即编辑ACL而不是替换它。

     

{USERNAME}:用户名

     

{PERMISSION}:许可可以是:

     

R - 阅读

     

W - 写

     

C - 改变(写)

     

F - 完全控制

     

例如,使用以下命令授予Rocky Full(F)控制权(在Windows命令提示符下键入):

     

C:> CACLS文件/ e / p rocky:f

     

输入以下命令阅读完整的帮助:

     

C:> cacls /?

答案 3 :(得分:18)

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

  

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

F提供完全访问权限。

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

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

答案 4 :(得分:11)

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

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

答案 5 :(得分:5)

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

虽然回答问题时回复的大多数答案都有一些优点,但IMHO都没有提供完整的解决方案。以下(可能是) Windows 7 的完美解决方案,如果您被权限设置损坏而被锁定在文件夹中:

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

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

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


备注

  1. 该命令应用于指定目录。

  2. 指定用户"每个人"设置最广泛的权限,因为它包括每个可能的用户。

  3. 选项" / remove:d"删除可能存在的任何显式DENY设置,因为这些设置会覆盖显式的ALLOW设置:创建新的ALLOW设置的必要预备。 这只是一个预防措施,因为通常没有DENY设置,但比抱歉更安全。

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

  5. " F"参数(即创建的权限)使其成为FULL控制的授权。

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

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

  8. ADDENDUM(2019/02/10) -

    今天向我推荐了Windows 10命令行 ,所以在这里。我还没有通过Windows 10对其进行测试,但是如果你有,请尝试一下(然后请你发表评论)。

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

答案 6 :(得分:4)

我在这方面挣扎了一段时间,只将这个帖子的答案结合起来(在Windows 10上): 1.打开cmd或PowerShell,然后转到包含文件
的文件夹 2. takeown / R / F
3. icacls * / T / grant dan:F

祝你好运!

答案 7 :(得分:3)

万一有其他人在这个页面上绊倒,如果你想在一个命令中将各种权限串起来,我就用这个:

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

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

答案 8 :(得分:2)

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

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

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

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

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

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

F - 完全访问

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

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

答案 9 :(得分:1)

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

您可以从Microsoft Support Page

获得官方发布

答案 10 :(得分:1)

批量文件夹创建和授予权限使用以下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文件中创建相同的域用户名,否则您将获得权限问题

答案 11 :(得分:0)

  1. 导航到要使用资源管理器设置权限的顶级目录
  2. 在资源管理器窗口的地址栏中输入cmd
  3. 输入icacls . /grant John:(OI)(CI)F /T,其中John是用户名
  4. 利润

仅添加此内容是因为这样做似乎极其简单,其他人可能会获利-所有功劳归于Călin Darie

答案 12 :(得分:0)

我是管理员,并且某些脚本在我的名字上对目录中的所有文件和子文件夹设置了“拒绝”权限。执行icacls "D:\test" /grant John:(OI)(CI)F /T命令不起作用,因为它似乎没有从我的名单中删除此名单中的“拒绝”。

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

答案 13 :(得分:0)

优点CălinDarie

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

1获取文件夹挂载GUID到临时文件然后读取GUID以将卷装载为临时驱动器X:应用秒并记录更改然后仅从X:驱动器卸载卷,以便挂载的文件夹不会被更改或者在应用的秒之后中断。

这是我的脚本示例:

**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**

答案 14 :(得分:0)

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

答案 15 :(得分:-1)

在Windows 10中,无需使用“ c:>”和“>”

例如:

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

clcls“文件或文件夹路径” / e / p用户名:F

(这也可以修复错误2502和2503)

clcls“ C:\ Windows \ Temp” / e / p用户名:F

答案 16 :(得分:-4)

这对我有用:

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

  2. 选择该文件夹中的可执行文件/应用程序文件。

  3. 右键单击它并转到属性 - &gt; 兼容性

  4. 现在查看权限级别并检查以管理员身份运行

  5. 点击更改所有用户的设置

  6. 问题现在解决了。