Практически в любой организации со временем образуется большое количество сетевых шар с огромным количеством подкаталогов. Зачастую права на эти шары даются и группам, и напрямую пользователям, причем если это делалось до вас, то определить текущие права доступа становится непростой задачей.
Привожу скрипт на PowerShell, который собирает информацию по всем подкаталогам и правам доступа к ним в заданной папке, а затем выгружает её в файл CSV в удобном для анализа виде —
$folder = "\\file.domaino.ru\Departments\" $resc = gci $folder | where {$_.extension -like ""} $out = foreach($r in $resc) { $s = get-acl $r.fullname foreach($inherit in $s.Access) { $inherit | add-member -membertype noteproperty -name Path -value $r.fullname -passthru | select Path, IdentityReference, filesystemrights } } $out | Export-Csv -Encoding "Unicode" -Path "c:\FolderReport.csv" -Delimiter ";"
Также не редка ситуация, когда требуется найти явно назначенные, не наследуемые права на каталоги. Для получения списка таких прав, потребуется немного изменить скрипт —
$folder = "\\file.domain.corp\Share\" $resc = gci $folder | where {$_.extension -like ""} $out = foreach($r in $resc) { $s = get-acl $r.fullname foreach($inherit in $s.Access) { if ($inherit.IsInherited -like "False") { $inherit | add-member -membertype noteproperty -name Path -value $r.fullname -passthru | select Path, IdentityReference, filesystemrights } } } $out | Export-Csv -Encoding "Unicode" -Path "c:\FolderReport.csv" -Delimiter ";"
Надеюсь эти простые инструменты помогут вам в работе 🙂
Спасибо за инфу про доступ к шаре 😀
Спасибо за пример, однако в указанном коде выполняется отбор всех элементов файловой системы, у которых пустое расширение. Это может привести к тому, что в отчет не попадут папки с непустым расширением и файлы с пустым расширением.
Я бы рекомендовал вторую строку записать в виде:
$resc = gci $folder | where {$_.mode -like «d????»}
В этом случае отбор происходит по атрибутам элемента (где так же можно указать дополнительные атрибуты)
А в случае, если необходимо рекурсивно обойти весь каталог:
$resc = gci $folder -recurse | where {$_.mode -like «d????»}
Спасибо большое, что поделились таким ценным скриптом!
Именно такая задача и появилась: собрать все ACL на сетевом диске. А с PowerShell совсем не знаком и сам бы не сваял такое)
Не сочтите за наглость))), но было бы замечательно добавить сбор прав с подкатологов. Что-то подобное есть здесь: http://windowsnotes.ru/powershell-2/upravlenie-acl-iz-powershell/
Ещё раз спасибо за выложенный в Интернет инструмент)))
Добрый день. Достаточно во второй строке после gci указать -recurse
И еще небольшое добавление — чтобы ограничить глубину сбора информации по каталогам, используйте:
$level = $folder.Split(‘\’).count
$resc = gci -recurse $folder | where { $_.PSIsContainer -and ($_.fullname.Split(‘\’).count -le ($level + 2)) }
где +2 — глубина поиска
Спасибо большое. Проверил — работает:)
Спасибо большое за скрипты.
Добрый день. Большое спасибо за столь ценный инструмент.
Подскажите, а возможно модифицировать первый скрипт, чтобы раскрывались группы пользователей до конечных пользователей?
Присоединяюсь к просьбе Олега!
Скрипт выводит список и групп, и пользователей, которые имеют права на папку. Для получения информации о составе групп необходимо использовать как вариант такую строку:
import-module ActiveDirectory
Get-ADgroup -filter * | Get-ADGroupMember
Извините за ламерский вопрос, но как добавить в вывод помимо логина пользователя ещё и его ФИО?
И так же не могу в выходном файле раскрыть группу.
Буду весьма признателен за помощь!
Всё красиво работает 🙂
Как теперь обратно применить права к папкам из файла используя эту выгрузку?
Спасибо,очень помог!
Скрипт всё еще актуален, спасибо, сэкономил кучу времени!