powershell将用户权限添加到Windows服务器中的文件夹

时间:2017-12-15 13:46:02

标签: powershell permissions acl

所以我有了下一条路:C:\folder1\folder2\fileName。查看 C:\ folder1 上的安全标签,其中 Alice 用户名为完整权限。但是转到 C:\ folder1 \ folder2 \ fileName Alice还没有。如何在C:\ folder1中插入powershell v2 Alice成员递归,以便根C:\ folder1下的所有文件也将具有设置为完全权限的相同Alice用户名。

我试过了:

$acl = Get-Acl C:\folder1
$permission = "domain\Alice","FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl C:\folder1

但它似乎并不适用于C:\ folder1 \ folder1 \ fileName。猜猜我试图为Alice申请权限,但在最后一个fileName项目中还没有。

2 个答案:

答案 0 :(得分:2)

正如您在FileSystemAccessRule文档中所看到的,该类具有继承属性。 您必须将该属性添加到$properties

$permission = "domain\Alice", 
"FullControl",  
[System.Security.AccessControl.InheritanceFlags]"ContainerInherit", 
[system.security.accesscontrol.PropagationFlags]"None",
"Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission

答案 1 :(得分:1)

您还可以通过使用Get-ChildItems cmdlet获取所有子项并将它们通过管道输送到Set-Acl cmdlet来递归地添加权限,就像在Microsoft网站文档中的示例中所做的一样:{ {3}}。查看“示例3:将安全描述符应用于多个文件”或阅读以下内容(从页面复制):

PS C:\> $NewAcl = Get-Acl File0.txt
PS C:\> Get-ChildItem -Path "C:\temp" -Recurse -Include "*.txt" -Force | Set-Acl - AclObject $NewAcl
     

这些命令将File0.txt文件中的安全描述符应用于C:\ Temp目录及其所有子目录中的所有文本文件。

     

第一个命令获取当前目录中File0.txt文件的安全描述符,并使用赋值运算符(=)将其存储在$ NewACL变量中。

     

管道中的第一个命令使用Get-ChildItem cmdlet来获取C:\ Temp目录中的所有文本文件。 Recurse参数将命令扩展到C:\ temp的所有子目录。 Include参数将检索到的文件限制为文件扩展名为“ .txt”的文件。 Force参数获取隐藏文件,否则将被排除。 (您不能使用“ c:\ temp * .txt”,因为-Recurse参数适用于目录,而不适用于文件。)

     

管道运算符(|)将表示检索到的文件的对象发送到Set-Acl cmdlet,该cmdlet将AclObject参数中的安全描述符应用于管道中的所有文件。

     

实际上,最好将Whatif参数与所有可能影响多个项目的Set-Acl命令一起使用。在这种情况下,管道中的第二个命令将是“ Set-Acl -AclObject $NewAcl -WhatIf”。此命令列出了将受该命令影响的文件。查看结果后,您可以在没有Whatif参数的情况下再次运行命令。

这是一个使用“ .txt”文件的示例,但也可以修改以应用于目录。