Когда возникает задача определить права доступа к тому или иному файлу/каталогу на, скажем, сетевой шаре, в инфраструктуре Windows это может стать небольшой проблемой.
Встроенное графическое средство позволяет быстро и непринужденно увидеть список всех групп и пользователей, имеющих доступ к файлу. Сложности начинаются, когда Вы обнаруживаете, что права на доступ к файлу выданы группе из ActiveDirectory (или не одной группе). Тогда Вам приходится изучать списки соответствующих групп в AD. Дабы не делать это всё мышкой, (особенно если список пользователей нужно предоставить кому-то в человеко-читаемом виде) можно использовать предлагаемый код на PowerShell:
function Get-Perm ($dc, $ent=".")
{
$acl = (Get-Acl "$ent").Access
foreach ($identity in $acl)
{
$identity | Add-Member -MemberType NoteProperty -Name Path -Value $ent
$prob_dc, $adgroup = ($identity.IdentityReference.Value -split "\\")[0,-1]
if ($prob_dc -eq $dc)
{
try
{
$members = (Get-ADGroupMember -Recursive $adgroup | Get-ADuser | Select samAccountName,name,enabled)
$identity | Add-Member -MemberType NoteProperty -Name Members -Value $members
}
catch
{
$identity | Add-Member -MemberType NoteProperty -Name Members -Value $null
}
} else {
$identity | Add-Member -MemberType NoteProperty -Name Members -Value $null
}
}
$acl
}
Get-Perm DOMAIN Controlling
Собственно скрипт реализован как функция, может использоваться непосредственно, так и встаиваться в другие скрипты (пример вызова в строке 27).
В качестве аргументов функция принимает костыль ($dc - имя домена, в котором следует искать объекты) и имя файла/каталога ($ent) для каторого вывести ACL-ы. Поиск пользователей в группах происходит в строке 13.
Результат работы скрипта следующий (sensetive data прикрыта чёрными дырами):

Path - имя файла. Поля Members содержат списки пользователей соответствующей группы. Остальные поля стандартны для cmdlet-а Get-ACL.
Для работы требуется модуль ActiveDirectory.