Записки опиумного мака

обо всем по немногу

Как получить список пользователей AD имеющих доступ к папк

Самый удобный вариант, это взять скрипт на 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»
#Создаем файл по пути $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 = $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 $name
foreach ($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 $u
foreach ($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 $name
foreach ($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 $u
foreach ($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/ 

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

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