Самый удобный вариант, это взять скрипт на PowerShell, подправить его под себя и запустить.
Хороший скрипт нашел тут: https://itbru.ru/index.php/2017/08/02/powershell-sozdanie-spiska-userov/.
Есть у него недостатки:
- структура имеет наследование через несколько групп;
- нужно просмотреть не только указанную папку, но и подпапки в этой папке.
Т.е. есть группа, в группе есть другие группы, а уже в этих подгруппах есть пользователи.
Мне повезло и у меня дерево состоит всего-лишь из 2-х ветвей. Т.е. группа — подгруппа — пользователи.
Есть возможность сделать просмотр всех папок в указанной папке, но это займет довольно много времени, поэтому не рекомендую.
##Скрипт для получения списка доменных учетных записей которые имеют права на папку. Список выгружается в CSV файл.##Указываем папку по которой нужен отчет$path = “Z:FTP”#Содержимое (подпапки) папки по которой нужен отчет, можно добавить ключ -Recurse и тогда будут просмотрены все подпапки вгубь, но это займет очень много времени.$folder_path = dir -Directory -Path $path -Force#путь куда клать CSV$datafile = «c:TempAccessRights.csv»#Создаем файл по пути $datafileSet-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 = $path+»;;;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}#Если группа — получаем список пользователей в группеif ($ADObject.ObjectClass.ToString() -eq «group»){$group = $name$data = $path+»;»+$group+»;;;»+$AccessType+»;Группа»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8$gusers = Get-ADGroupMember $nameforeach ($u in $gusers){if ($u.ObjectClass.ToString() -eq «user»){$name = $u.SamAccountName$data = $path+»;»+$group+»;;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}#Если группа в группе — получаем список пользователей в группеif ($u.ObjectClass.ToString() -eq «group»){$name = $u.SamAccountName$pgroup = $name$data = $path+»;»+$group+»;»+$pgroup+»;;»+$AccessType+»;Группа»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8$userss = Get-ADGroupMember $uforeach ($uu in $userss){$name = $uu.SamAccountName$data = $path+»;»+$group+»;»+$pgroup+»;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}}}}}}Foreach ($folder in $folder_path){#Получаем списки безопасности целевой папки$Acl = Get-Acl $folder.FullName$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 = $folder.FullName+»;;;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}#Если группа — получаем список пользователей в группеif ($ADObject.ObjectClass.ToString() -eq «group»){$group = $name$data = $folder.FullName+»;»+$group+»;;;»+$AccessType+»;Группа»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8$gusers = Get-ADGroupMember $nameforeach ($u in $gusers){if ($u.ObjectClass.ToString() -eq «user»){$name = $u.SamAccountName$data = $folder.FullName+»;»+$group+»;;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}#Если группа в группе — получаем список пользователей в группеif ($u.ObjectClass.ToString() -eq «group»){$name = $u.SamAccountName$pgroup = $name$data = $folder.FullName+»;»+$group+»;»+$pgroup+»;;»+$AccessType+»;Группа»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8$userss = Get-ADGroupMember $uforeach ($uu in $userss){$name = $uu.SamAccountName$data = $folder.FullName+»;»+$group+»;»+$pgroup+»;»+$name+»;»+$AccessType+»;Пользователь»#Запись в файлAdd-Content -Value $data -Path $DataFile -Encoding UTF8}}}}}}}
Использовал так же наработки со страницы: https://fixmypc.ru/post/kak-rabotat-s-razresheniiami-ntfs-acl-v-powershell/