如何使用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
= Container Inherit - 此标志指示从属容器将继承此ACE。OI
= Object Inherit - 此标志指示从属文件将继承ACE。/T
=递归应用于现有文件和子文件夹。 (OI
和CI
仅适用于新文件和子文件夹)。信用:@AlexSpence发表评论。XCACLS.VBS是一个非常强大的脚本,可以更改/编辑ACL信息。 c:\ windows \ system32 \ cscript.exe xcacls.vbs帮助返回所有开关和选项。
你可以从Microsoft Support Page获得官方发行
批量文件夹创建和授予权限使用以下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文件中创建相同的域用户名,否则您将获得权限问题
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
优点Calin Darie
我有很多脚本使用cacl我将它们移动到icacls我怎么都找不到一个脚本来更改root挂载卷示例: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**
我是管理员,一些脚本在我的名字上对目录中的所有文件和子文件夹放置了“拒绝”权限。执行icacls "D:\test" /grant John:(OI)(CI)F /T
命令不起作用,因为它似乎没有从我的名单中删除此列表中的“拒绝”。
唯一对我有用的是使用icacls "D:\test" /reset /T
命令重置所有权限。
这对我有用:
问题现在解决了。
您也可以使用ICACLS。
要将Users组完全控制权授予文件夹:
>icacls "C:\MyFolder" /grant Users:F
为C:\MyFolder
的IIS用户授予修改权限(如果您需要IIS能够将R / W文件放入特定文件夹):
>icacls "C:\MyFolder" /grant IIS_IUSRS:M
如果你做ICACLS /?您将能够看到所有可用选项。
使用cacls
命令。查看信息here。
CACLS文件/电子邮件{USERNAME}:{PERMISSION}
哪里,
/ p:设置新权限
/ e:编辑权限并保留旧权限,即编辑ACL而不是替换它。
{USERNAME}:用户名
{PERMISSION}:许可可以是:
R - 阅读
W - 写
C - 改变(写)
F - 完全控制
例如,使用以下命令授予Rocky Full(F)控件(在Windows命令提示符下键入):
C:> CACLS文件/ e / p rocky:f
键入以下命令阅读完整的帮助:
C:> cacls /?
打开命令提示符,然后执行以下命令:
icacls "c:\somelocation\of\path" /q /c /t /grant Users:F
F
提供完全访问权限。
/q /c /t
将权限应用于子文件夹。
注意:有时“以管理员身份运行”会有所帮助。
我尝试以下方式,它适合我:
1.打开cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4. del *.* /S /Q
这样文件就可以成为我自己的访问权限并分配给“删除”,然后我可以删除文件和文件夹。
损坏的权限:重新获得对文件夹及其子对象的访问权限
虽然回答这个问题的大部分答案都有一些优点,但IMHO都没有提供完整的解决方案。如果您通过损坏的权限设置锁定文件夹,则以下(可能是)Windows 7的完美解决方案:
icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T
对于Windows 10,必须在/remove:d
选项后指定user / SID:
icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
。 笔记:
ADDENDUM(2019/02/10) -
今天向我推荐了Windows 10命令行,所以在这里。我没有Windows 10来测试它,但如果你有,请尝试一下(然后请你在下面发表评论)。
此更改仅涉及删除DENY设置作为第一步。可能没有任何DENY设置存在,因此该选项可能没有任何区别。我的理解是,在Windows 7上,您不需要在/ remove之后指定用户:d但我可能错了!
我挣扎了一段时间,只结合这个线程的答案为我工作(在Windows 10上): 1.打开cmd或PowerShell,然后转到包含文件的文件夹 2. takeown / R / F. 3. icacls * / T / grant dan:F
祝好运!
为了防止其他人在这个页面上绊倒,如果你想在一个命令中将各种权限串起来,我使用了这个:
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域\用户名:(OI)(CI)F / t
/ grant:r - 授予指定的用户访问权限。权限替换以前授予的显式权限。如果没有:r,则会将权限添加到以前授予的任何显式权限
(OI)(CI) - 此文件夹,子文件夹和文件。
F - 完全访问权限
/ t - 遍历所有子文件夹以匹配文件/目录。
这给了我的是这个服务器上的一个文件夹,用户只能看到该文件夹并创建了子文件夹,他们可以读写文件。以及创建新文件夹。