
Мне нужно запретить группе доступ к папке/файлам C:\Windows\Installer
Я пытаюсь использовать следующее, но это применяется только к папке, а не ко всем файлам, это применяется к некоторым файлам
$path = "C:\Windows\Installer"
$acl = Get-Acl $path
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("YourUsers","FullControl", "ContainerInherit,ObjectInherit", "None", "Deny")
$acl.AddAccessRule($AccessRule)
Set-Acl -AclObject $acl -Path $path
Я что-то упустил из своего сценария?
EDIT: После проверки разрешений на файлы, которые я могу удалить, похоже, что наследование отключено
Как проверить, отключено ли наследование или нет, и если отключено, то включить его?
Мне нужно применить это к машине 5000, поэтому я делаю это через скрипт.
решение1
Вы применяете изменение ACL только к той папке, которую указали с помощью $path
. Чтобы применить ACL ко всему в папке, вам необходимо рекурсивно перечислить каждый элемент:
$path = "C:\Windows\Installer"
$items = Get-ChildItem -Recurse $path
# Enables inheritance on all items in folder
foreach ($item in $items)
{
$acl = Get-acl $item.FullName
$acl.SetAccessRuleProtection($false,$true)
Set-Acl -AclObject -Path $item.FullName
}
# Sets file / folder permission to desired state
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("YourUsers","FullControl", "ContainerInherit,ObjectInherit", "None", "Deny")
foreach ($item in $items)
{
$acl = Get-acl $item.FullName
# Compare item's folder permission against root folder, if different apply ACL
if ((Compare-Object -ReferenceObject (Get-ACL $path) -DifferentObject (Get-ACL $item) -Property access) -ne $null)
{
$acl.AddAccessRule($AccessRule)
Set-Acl -AclObject $item.FullName
}
}