Или как узнать состоит ли пользователь в доменной группе безопасности с помощью 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
# Пользователь не состоит в группе
# Задаём какие-то действия
}
}
Кстати, теме очистки группы безопасности от всех пользователей был посвящен вот этот пост.