我正在尝试使用“默认”选项来应用文件夹权限;因此,我的意思是在文件夹的“属性”中使用“完全控制,写入,读取等”。
以下脚本用于添加用户,但它应用“特殊权限” - 而不是带有文件夹属性菜单中可见的勾选框的那些:
$Acl = Get-Acl "\\R9N2WRN\Share"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule ("user","FullControl","Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "\\R9N2WRN\Share" $Acl
我做错了什么?
在FileSystemAccessRule()
构造函数中指定继承可修复此问题,如下面的修改代码所示(请注意在"FullControl"
和"Allow"
之间插入的两个新的构造函数参数)。
$Acl = Get-Acl "\\R9N2WRN\Share"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("user", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "\\R9N2WRN\Share" $Acl
“当您按照自己的方式创建FileSystemAccessRule时,InheritanceFlags属性设置为None。在GUI中,这对应于ACE,其中”应用于“框设置为”仅此文件夹“,并且必须查看该类型的条目通过高级设置。“
我已经测试了修改并且它有效,但当然可归功于MVP在该主题中发布了答案。
参考@ Gamaliel的回答:$ args是在运行时传递给脚本的参数数组 - 因此不能像@ Gamaliel那样使用它。这实际上是有效的
$myPath = 'C:\whatever.file'
# get actual Acl entry
$myAcl = Get-Acl "$myPath"
$myAclEntry = "Domain\User","FullControl","Allow"
$myAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($myAclEntry)
# prepare new Acl
$myAcl.SetAccessRule($myAccessRule)
$myAcl | Set-Acl "$MyPath"
# check if added entry present
Get-Acl "$myPath" | fl
使用PowerShell设置权限(文件/目录)的另一个示例:
Get-Acl "C:\file.txt" | fl *
$acl = Get-Acl "C:\file.txt"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("everyone","FullControl","Allow")
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "C:\file.txt"
希望这可以帮助