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 } }
Добрый день!
Подскажите, как выудить список папок в сетевой шаре, к которым имеет доступ (с указанием типа доступа) определённая группа домена?
Необходимо получить ACL интересующих папок из шары и скриптом проверить на вхождение группы в ACL.
Получаете ACL как в скрипте выше и в foreach делаете условие(if) имя группы. Если условие выполнено — выгружаете в файл или выводите на экран.
Блин, всё это классно, но пока это выше моих возможностей 🙁
Не могли бы Вы выложить тут готовый скрипт? Буду весьма благодарен! И в дальнейшем буду его разбирать и сравнивать с первоначальным скриптом что бы научится и понять логику PS.
Опять же, в выводе скрипта не указана, какая папка проверялась, что не очень удобно. А если папок будет много, то тут вообще невозможно будет разобраться.