您可以使用 cmdlet 遍历所有文件夹Get-ChildItem
,并检查每个 ACL,在需要的地方添加权限,但您必须下拉到 .Net 类和方法中的某些部分。
假设您可以在直接父目录上设置 ACL 并允许文件继承(而不是子文件夹),您可以这样做:
$identity = "NT AUTHORITY\SYSTEM"
$basePath = "U:\"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $identity,"FullControl","ObjectInherit","None","Allow"
foreach($folder in Get-ChildItem -Path $basePath -Recurse -Directory)
{
$acl = $folder.GetAccessControl("Access")
if(!($acl.Access | ? { $_.IdentityReference -eq $identity -and $_.FileSystemRights -eq "FullControl" }))
{
$acl.AddAccessRule($accessRule)
$folder.SetAccessControl($acl)
}
}
规则$accessRule
是将此设置应用于文件夹和所有直接子文件。有关用于创建的继承标志的信息,请参阅此 stackoverflow 问题$accessRule
如果您需要单独设置每个文件(我真诚地希望您不必处理),您可以稍微修改上面的内容:
$identity = "NT AUTHORITY\dd"
$basePath = "U:\"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $identity,"FullControl","None","None","Allow"
foreach($folder in Get-ChildItem -Path $basePath -Recurse)
{
$acl = $folder.GetAccessControl("Access")
if(!($acl.Access | ? { $_.IdentityReference -eq $identity -and $_.FileSystemRights -eq "FullControl" }))
{
$acl.AddAccessRule($accessRule)
$folder.SetAccessControl($acl)
}
}