@long_skinny_boy

Как можно определить перечень файлов и директорий с отсутствующий группой безопасности через Powershell?

Добрый день, подскажите пожалуйста. Есть огромная многоуровневая иерархическая папка с файлами (более 100 000 файлов и папок), в которой в 95% случаях в настройках доступа присутствует определенная группа, в остальных 5% отсутствует.
Задача такая, что необходимо периодически запускать скрипт, который будет добавлять группу в недостающих папках и файлах рекурсивно

Пробовал таким способом, когда тупо все папкам назначается группа, без разницы есть она или нет, но процесс очень долгий, причём применяет только на папки

$path = "\\directory"
$acl = (Get-Item $path).GetAccessControl('Access')
$group = "ad\test-group"
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule($group, @('Read', 'ReadAndExecute'), 'ContainerInherit,ObjectInherit', 'None', 'Allow')
$acl.SetAccessRule($ar)
Set-Acl -path $path -AclObject $acl


Потому, думаю, можно ли просто получить перечень всех файлов и папок с отсутствующей группой безопасности и только на этом перечне применять
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule($group, @('Read', 'ReadAndExecute'), 
      'ContainerInherit,ObjectInherit', 'None', 'Allow')
# Получаете список папок
Get-ChildItem -Directory -Recurse $Path | Foreach-Object {
# Получаете по ним ACL
  $acl = $_.GetAccessControl('Access')
# Сравниваете с нужным
  if (-not ($acl.Access.IdentityReference -eq $group)) {
# Добавляете если надо
    $acl.SetAccessRule($ar)
    $_.SetAccessControl($acl)
  }
}

upd: Поправил сравнение, так как для массивов на -eq происходит фильтрация, вынес создание $ar из цикла

А вообще, как у вас могут появляться папки без нужных прав? Может права/наследование надо грамотно настроить ? Или скрипт на мониторинг создания папок повесить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы