您可以使用Get-ChildItem
cmdlet遍歷所有文件夾,並檢查每個ACL,在需要的位置添加權限,但必須將某些部分下載到.Net類和方法。 $accessRule
是說應用此設置
$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)
}
}
規則:
假設你可以只設置於眼前的父目錄的ACL,並允許文件繼承(沒有子文件夾),你可以這樣做到文件夾和所有直接的子文件。見this stackoverflow question的信息有關用於創建$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)
}
}