Меню Закрыть

Cписок прав доступа к сетевой папке (шаре) на PowerShell

Практически в любой организации со временем образуется большое количество сетевых шар с огромным количеством подкаталогов. Зачастую права на эти шары даются и группам, и напрямую пользователям, причем если это делалось до вас, то определить текущие права доступа становится непростой задачей.
Привожу скрипт на PowerShell, который собирает информацию по всем подкаталогам и правам доступа к ним в заданной папке, а затем выгружает её в файл CSV в удобном для анализа виде –

Также не редка ситуация, когда требуется найти явно назначенные, не наследуемые права на каталоги. Для получения списка таких прав, потребуется немного изменить скрипт –

Надеюсь эти простые инструменты помогут вам в работе 🙂

14 Comments

  1. Сергей

    Спасибо за пример, однако в указанном коде выполняется отбор всех элементов файловой системы, у которых пустое расширение. Это может привести к тому, что в отчет не попадут папки с непустым расширением и файлы с пустым расширением.
    Я бы рекомендовал вторую строку записать в виде:
    $resc = gci $folder | where {$_.mode -like “d????”}
    В этом случае отбор происходит по атрибутам элемента (где так же можно указать дополнительные атрибуты)
    А в случае, если необходимо рекурсивно обойти весь каталог:
    $resc = gci $folder -recurse | where {$_.mode -like “d????”}

  2. Андрей

    Спасибо большое, что поделились таким ценным скриптом!
    Именно такая задача и появилась: собрать все ACL на сетевом диске. А с PowerShell совсем не знаком и сам бы не сваял такое)

    Не сочтите за наглость))), но было бы замечательно добавить сбор прав с подкатологов. Что-то подобное есть здесь: http://windowsnotes.ru/powershell-2/upravlenie-acl-iz-powershell/

    Ещё раз спасибо за выложенный в Интернет инструмент)))

    • Kvazar

      Добрый день. Достаточно во второй строке после gci указать -recurse

    • Kvazar

      И еще небольшое добавление – чтобы ограничить глубину сбора информации по каталогам, используйте:
      $level = $folder.Split(‘\’).count
      $resc = gci -recurse $folder | where { $_.PSIsContainer -and ($_.fullname.Split(‘\’).count -le ($level + 2)) }

      где +2 – глубина поиска

  3. Олег

    Добрый день. Большое спасибо за столь ценный инструмент.
    Подскажите, а возможно модифицировать первый скрипт, чтобы раскрывались группы пользователей до конечных пользователей?

    • Kvazar

      Скрипт выводит список и групп, и пользователей, которые имеют права на папку. Для получения информации о составе групп необходимо использовать как вариант такую строку:
      import-module ActiveDirectory
      Get-ADgroup -filter * | Get-ADGroupMember

  4. Александр

    Извините за ламерский вопрос, но как добавить в вывод помимо логина пользователя ещё и его ФИО?
    И так же не могу в выходном файле раскрыть группу.
    Буду весьма признателен за помощь!

  5. Tietatter

    Всё красиво работает 🙂
    Как теперь обратно применить права к папкам из файла используя эту выгрузку?

Добавить комментарий

Ваш адрес email не будет опубликован.

5 × 1 =

%d такие блоггеры, как: