Хороший скрипт нашел тут: 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:\Temp\AccessRights.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/
Комментариев нет:
Отправить комментарий