PowerShell设置文件夹权限

时间:2014-09-11 05:02:21

标签: file-permissions powershell-v3.0

我正在尝试使用“默认”选项来应用文件夹权限;因此,我的意思是在文件夹的“属性”中使用“完全控制,写入,读取等”。

以下脚本用于添加用户,但它应用“特殊权限” - 而不是带有文件夹属性菜单中可见的复选框的那些:

$Acl = Get-Acl "\\R9N2WRN\Share"

$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule ("user","FullControl","Allow")

$Acl.SetAccessRule($Ar)
Set-Acl "\\R9N2WRN\Share" $Acl

我做错了什么?

5 个答案:

答案 0 :(得分:55)

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

根据this topic

  

“当你以你的方式创建FileSystemAccessRule时,   InheritanceFlags属性设置为None。在GUI中,这个   对应于ACE,并将“应用于”框设置为“仅此文件夹”,   并且必须通过高级查看该类型的条目   设置“。

我已经测试了修改并且它有效,但当然可归功于MVP在该主题中发布了答案。

答案 1 :(得分:2)

请参阅@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

答案 2 :(得分:0)

以防您不得不处理许多包含子文件夹和其他递归内容的子文件夹。 @Mike L'Angelo的一些小改进:

$mypath = "path_to_folder"
$myacl = Get-Acl $mypath
$myaclentry = "username","FullControl","Allow"
$myaccessrule = New-Object System.Security.AccessControl.FileSystemAccessRule($myaclentry)
$myacl.SetAccessRule($myaccessrule)
Get-ChildItem -Path "$mypath" -Recurse -Force | Set-Acl -AclObject $myacl -Verbose

详细程度在最后一行是可选的

答案 3 :(得分:0)

$path = "C:\DemoFolder"
$acl = Get-Acl $path
$username = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$Attribs = $username, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"
$AccessRule = New-Object System.Security.AcessControl.FileSystemAccessRule($Attribs)
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl $path
Get-ChildItem -Path "$path" -Recourse -Force | Set-Acl -aclObject $acl -Verbose

答案 4 :(得分:-1)

使用PowerShell设置权限(文件/目录)的另一个示例:

Verfiy权限

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"

截图: enter image description here enter image description here

希望这有帮助