带文件夹排除的 Set-ACL

Set-ACL with folder exclude

我正在尝试为文件夹、子文件夹和文件设置修改权限,并排除其中的特定文件夹。 我尝试了两种方法,但每种方法都有一个小问题。 在第一个上,我成功应用了所有权限,但“temp”文件夹排除不起作用。它也获得了权限:

$Acl = Get-Acl "C:\Users\John\Desktop\test"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "C:\Users\John\Desktop\test" $Acl -Exclude "C:\Users\John\Desktop\test\temp"

第二个选项是排除文件夹,但也没有为根文件夹设置权限。 我知道他是因为 get-childitem,但我不明白如何在代码中也包含根文件夹:

$Acl = Get-Acl "C:\Users\John\Desktop\test"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
get-childitem "C:\Users\John\Desktop\test\" -Recurse -Exclude "C:\Users\John\Desktop\test\temp" | Set-Acl -AclObject $Acl

非常感谢你的帮助。 谢谢!

希望我做对了。目前我 运行 代码在家,明天我会在工作中更深入地测试它。 这就是我所做的:

$Acl = Get-Acl "C:\Users\John\Desktop\Test"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
get-childitem "C:\Users\John\Desktop\Test\" -Recurse -Exclude "TempFolder" | Set-Acl -AclObject $Acl

##########################################################

$AclRoot = Get-Acl "C:\Users\John\Desktop\Test"
$ArRoot = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "Modify", "ObjectInherit", "NoPropagateInherit", "Allow")
$AclRoot.SetAccessRule($ArRoot)
Get-Item "C:\Users\John\Desktop\Test" | Set-Acl -AclObject $AclRoot

结果是:

  • 除 TempFolder 之外所有带有“所有人 - 修改”的子文件夹和文件。
  • “测试”根文件夹与“所有人-修改”-“此文件夹和文件”(特殊权限) 我希望它能满足我工作的需要。

再次感谢!