PowerShell. Создание списка пользователей с указанием прав доступа к папке.

Задача выяснить кто из пользователей домена имеет доступ к сетевой папке и какими правами обладает.Если доступ имеют всего несколько пользователей, то это не сложно сделать руками. Но если пользователей много, да еще и с группами, то приходится задумываться об автоматизации процесса.

Нам нужно получить списки доступа к папке, отделить пользователей от групп, получить пользователей которые входят в группы и выгрузить все это в удобочитаемой форме.

Нюансы:

Меня интересовали только доменные учетки, по этому в итоговые данные не попадают локальные пользователи сервера.

Отличать группы от пользователей будем при помощи командлета Get-ADObject который возвращает ObjectClass «User» или «Group» для пользователя или группы соответственно.

 

#
#Скрипт для получения списка доменных учетных записей которые имеют права на папку. Список выгружается в CSV файл. 
#
#Указываем папку по которой нужен отчет
$path = “путь до целевой папки. Допускается указать сетевую папку”
#путь куда клать CSV
$datafile = "c:\AccessRights.csv"
#Создаем файл по пути $datafile
Set-Content -Value 'Имя пользователя;Права доступа;' -Path $datafile -Encoding UTF8
#Получаем имя домена
$domain = (Get-ADDomain).name.ToUpper()
#Получаем списки безопасности целевой папки
$Acl = Get-Acl $path
$acl = $acl.Access
#Перебираем список доступа
foreach ($a in $acl)
{
#Берем только доменные учетки
if ($a.IdentityReference -match $domain)
{
#Переводим уровень доступа на человеческий)
if ($a.FileSystemRights.ToString() -eq "ReadAndExecute, Synchronize") {$AccessType = "Только Чтение"}
elseif ($a.FileSystemRights.ToString() -eq "Modify, Synchronize") {$AccessType = "Чтение и Запись"}
elseif ($a.FileSystemRights.ToString() -eq "FullControl") {$AccessType = "Полный доступ"}
else {$AccessType = "Custom"}
$name = $a.IdentityReference.Value.ToString().Replace($domain+"\",'')
#Выясняем группа или пользователь
$ADObject = Get-ADObject -filter{SamAccountName -eq $name}
if ($ADObject.ObjectClass.ToString() -eq "user") {$data = $name+";"+$AccessType}
#Если группа - получаем список пользователей в группе
if ($ADObject.ObjectClass.ToString() -eq "group") 
{
$users = Get-ADGroupMember $name
foreach ($u in $users)
{
$name = $u.SamAccountName
$data = $name+";"+$AccessType 
#Запись в файл
Add-Content -Value $data -Path $DataFile -Encoding UTF8
}
}
#Запись в файл
Add-Content -Value $data -Path $DataFile -Encoding UTF8
}

}

 

4 ответа к «PowerShell. Создание списка пользователей с указанием прав доступа к папке.»

  1. Добрый день!
    Подскажите, как выудить список папок в сетевой шаре, к которым имеет доступ (с указанием типа доступа) определённая группа домена?

    1. Необходимо получить ACL интересующих папок из шары и скриптом проверить на вхождение группы в ACL.
      Получаете ACL как в скрипте выше и в foreach делаете условие(if) имя группы. Если условие выполнено — выгружаете в файл или выводите на экран.

  2. Блин, всё это классно, но пока это выше моих возможностей 🙁
    Не могли бы Вы выложить тут готовый скрипт? Буду весьма благодарен! И в дальнейшем буду его разбирать и сравнивать с первоначальным скриптом что бы научится и понять логику PS.

    1. Опять же, в выводе скрипта не указана, какая папка проверялась, что не очень удобно. А если папок будет много, то тут вообще невозможно будет разобраться.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.