所以我有了下一条路: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项目中还没有。
答案 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”文件的示例,但也可以修改以应用于目录。