param (
[string]$FolderListFile = $(throw "Укажите файл со списком папок, аккаунтов и прав с помощью ключа -FolderListFile.")
)

$FolderList=Import-Csv $FolderListFile -Delimiter ";"

$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None

$FolderList | ForEach-Object {
if (Test-Path $_.Folder)
{
if (Test-Path $_.Folder -pathtype container){
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
} else {
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
}
$acl = Get-Acl $_.Folder
if ($_.BlockInherit -eq "Yes"){
#Отключаем наследование прав от родителя с сохранением текущих прав.
$acl.SetAccessRuleProtection($True, $True)
Set-ACL $_.Folder $acl
$acl = Get-ACL $_.Folder
}
if ($_.AccessRights -eq "Remove"){
#Удаляем аккаунт/группу из ACL(Access Control List)
$AccessRights = [System.Security.AccessControl.FileSystemRights]"Read"
$AccessControlType =[System.Security.AccessControl.AccessControlType]::Allow
if ($_.SecIdentity -eq $acl.Group){
$objACL.SetGroup([System.Security.Principal.NTAccount]"BUILTIN\Administrators")
}
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule `
($_.SecIdentity, $AccessRights, $InheritanceFlag, $PropagationFlag, $AccessControlType)
$acl.RemoveAccessRuleAll($ace)
Set-ACL $_.Folder $acl
}else{
#Добавляем ACE(access control entry) в ACL(Access Control List)
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule `
($_.SecIdentity, $_.AccessRights, $InheritanceFlag, $PropagationFlag, $_.AccessControlType)
$acl.AddAccessRule($ace)
Set-ACL $_.Folder $acl
}
} else {
Write-Host "$_.Folder не существует!" -ForegroundColor Red
}
}