Заметки · 21.09.2022

Вас нет в списке!

Или как узнать состоит ли пользователь в доменной группе безопасности с помощью PowerShell.

По теме групп безопасности в Active Directory уже были посты: Кто в команде мечты? и Пользователи в группах AD.

Случалось ли Вам в ходе работы какого-то скрипта опрашивать доменные группы безопасности и выяснять есть ли пользователь в списке? Мне случалось. Неоднократно.

Только я делал всё очень топорно: получал список групп пользователя и в цикле сверял полученный массив с переменной, в которую пихал название нужной группы. Получался очень громоздкий код, который отрабатывал только с оглядкой на текущую фазу Луны.

В поисках более изящного решения я набрёл на очень лаконичное решение, немного добавил косметических тонкостей и получилось вот такое чудо:

# Логин пользователя в Active Directory
$user = 'username'

# Имя группы в Active Directory
$group = 'groupname'

# Узнаем является ли пользователь членом группы безопасности
$member = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
if ($member -contains $user)
   { 
     Write-Host "True" -ForegroundColor Cyan
     # Пользователь состоит в группе
     # Задаём какие-то действия
   }
else 
   { 
     Write-Host "False" -ForegroundColor Red
     # Пользователь не состоит в группе
     # Задаём какие-то действия
   }

Этот же метод можно применить, если нужно найти пользователя в списке групп:

# Логин пользователя в Active Directory
$user = 'username'

# Имена групп в Active Directory
$groups = 'groupname01', 'groupname02', 'groupname03'

# Цикл с перебором групп и определения членства
foreach ($group in $groups) {
        $members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
        if ($members -contains $user) 
         { 
           Write-Host "$group - True" -ForegroundColor Cyan
           # Пользователь состоит в группе
           # Задаём какие-то действия
         }
        else
         {
           Write-Host "$group - False" -ForegroundColor Red 
           # Пользователь не состоит в группе
           # Задаём какие-то действия
         }
}

Кстати, теме очистки группы безопасности от всех пользователей был посвящен вот этот пост.