How to grant permission to users for a directory using command line in Windows?
如何使用Windows命令行向目录(读取,写入,修改)上的用户授予权限?
从Vista开始,不推荐使用
1 2 3 4 | C:\\>cacls NOTE: Cacls is now deprecated, please use Icacls. Displays or modifies access control lists (ACLs) of files |
您应该改为使用
1 | C:\\>icacls"D:\\test" /grant John:(OI)(CI)F /T |
根据做MS文档:
-
F =完全控制 -
CI =容器继承-此标志指示从属容器将继承此ACE。 -
OI =对象继承-此标志指示从属文件将继承ACE。 -
/T =递归应用于现有文件和子文件夹。 (OI 和CI 仅适用于新文件和子文件夹)。信用:@AlexSpence发表评论。
有关完整的文档,您可以不带任何参数运行"
您也可以使用ICACLS。
授予用户组对文件夹的完全控制权限:
1 | >icacls"C:\\MyFolder" /grant Users:F |
授予
1 | >icacls"C:\\MyFolder" /grant IIS_IUSRS:M |
如果您做ICACLS /?您将能够看到所有可用选项。
打开命令提示符,然后执行以下命令:
icacls"c:\\somelocation\\of\\path" /q /c /t /grant Users:F
注意:有时"以管理员身份运行"会有所帮助。
使用
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.打开
2.
3.
4.
这样文件就可以成为我自己的访问权限,并将其分配给"删除",然后我可以删除文件和文件夹。
损坏的权限:重新获得对文件夹及其子对象的访问权限
尽管大多数回复该问题的答案都有其优点,但恕我直言,它们都没有提供完整的解决方案。如果您由于损坏的权限设置而无法锁定文件夹,则以下(可能是)Windows 7的完美解决方案:
1 | icacls"c:\\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T |
对于Windows 10,必须在
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文件中创建相同的域用户名,否则会出现权限问题
我是管理员,一些脚本在目录中所有文件和子文件夹的名称上都设置了"拒绝"权限。执行
对我唯一有效的方法是使用
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并检查其以管理员身份运行
单击所有用户的更改设置。
现在问题已解决。