Get-ADGroup: Управление группами Active Directory

Обновлено 01.12.2023

Управление группами AD через PowerShell

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами "Не удается продолжить выполнение кода, поскольку система не обнаружила VCRUNTIME140.dll". Идем далее и я хочу с вами сегодня поделиться наработками и скриптами PowerShell, которые помогут вам в управлении группами безопасности Active Directory. Думаю, что многим будет полезен данный материал и вы сможете почерпнуть из него много интересного, что в итоге вам сэкономит кучу времени и позволит прокачать свои навыки и знания.

Что за командлет Get-ADGroup?

Командлет Get-ADGroup является одним из множества командлетов, предоставляемых PowerShell для работы с Active Directory (AD) в операционной системе Windows. Get-ADGroup используется для получения информации о группах в AD. Назначение командлета заключается в том, чтобы позволить администраторам получать информацию о группах в AD, такую как имя группы, ее уникальный идентификатор (GUID), путь, к которому привязана группа, и другие свойства. Это очень полезно для управления группами и выполнения различных задач в AD.

Преимущества командлета Get-ADGroup в Active Directory перед похожими программами:

  1. Интеграция с PowerShell: Get-ADGroup является частью PowerShell, что позволяет использовать его вместе с другими командлетами и функциями PowerShell для более эффективной автоматизации и управления AD.
  2. Гибкость фильтрации: командлет предоставляет мощные возможности фильтрации, позволяющие получать только необходимую информацию о группах в AD.
  3. Широкий набор свойств: Get-ADGroup позволяет получить различные свойства групп, что делает его более гибким и полезным для различных задач.
  4. Простота использования: благодаря простому синтаксису и интуитивно понятным параметрам, командлет легко использовать, даже для администраторов без опыта работы с PowerShell.
  5. В целом, командлет Get-ADGroup является мощным инструментом для работы с группами в Active Directory. Он позволяет получить информацию о группах, управлять ими и автоматизировать различные задачи в AD.

Постановка задачи

В Active Directory для управления пользователями и назначение им различных прав доступа, используются группы безопасности. Это удобно, когда вы можете систематизировать распределение прав доступа, применение групповых политик и многое другое, так как это упрощает процесс администрирования учетных записей пользователей и в целом повышает безопасность всей системы.

Для повседневных и базовых задач по управлению группами Active Directory чаще всего используют оснастку "Active Directory Пользователи и компьютеры (ADUC)", но когда дело касается автоматизации и рутинной работы, то тут в дело вступает язык программирования PowerShell. PowerShell умеет выполнять все действия по управлению группами в домене Active Directory. Чуть ниже мы подробно разберем, как с помощью PowerShell:

  • ✅ Создать новую группу AD
  • ✅ Изменить состав группы AD, добавив или удалив пользователей
  • ✅ Изменить атрибуты группы AD
  • ✅ Получить список пользователей и при желании экспортировать его для дальнейшей обработки
  • ✅ Удаление группы AD

Скрипт по очистке группы от выключенных учетных записей

У меня есть тестовая группа безопасности "Test-groups-for-delete-disable-users", необходимо произвести ее очистку от неактивных пользователей.

# Указываем имя доменной группы
$groupName = "Test-groups-for-delete-disable-users"

# Получаем объект группы по имени
$group = Get-ADGroup $groupName

# Получаем список пользователей в группе и помещаем их в переменную
$users = Get-ADGroupMember $group | Where-Object {$_.objectClass -eq "user"}

# Создаем пустой список для хранения удаленных пользователей
$deletedUsers = @()

# Перебираем каждого пользователя в списке
foreach ($user in $users) {
# Проверяем, включена ли учетная запись пользователя
$accountEnabled = (Get-ADUser $user).Enabled

# Если учетная запись пользователя не включена, то удаляем его из группы
if (!$accountEnabled) {
Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false

# Добавляем удаленного пользователя в список удаленных пользователей
$deletedUsers += $user.Name
}
}

# Выводим список удаленных пользователей
Write-Host "Удалены следующие пользователи:"
$deletedUsers

Скрипт Powershell по очистке группы AD от выключенных учеток

Скрипт по очистке списка групп от выключенных учетных записей

Данная задача похожа на ту, что была выше, но тут у нас есть файл со списком групп безопасности Active Directory, к которому мы и будем обращаться в скрипте.

# Указываем путь к файлу со списком групп
$groupsFile = "путь_к_файлу"

# Читаем содержимое файла и помещаем его в переменную
$groups = Get-Content $groupsFile

# Перебираем каждую группу из списка
foreach ($groupName in $groups) {
# Получаем объект группы по имени
$group = Get-ADGroup $groupName

# Получаем список пользователей в группе и помещаем их в переменную
$users = Get-ADGroupMember $group | Where-Object {$_.objectClass -eq "user"}

# Создаем пустой список для хранения удаленных пользователей
$deletedUsers = @()

# Перебираем каждого пользователя в списке
foreach ($user in $users) {
# Проверяем, включена ли учетная запись пользователя
$accountEnabled = (Get-ADUser $user).Enabled

# Если учетная запись пользователя не включена, то удаляем его из группы
if (!$accountEnabled) {
Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false

# Добавляем удаленного пользователя в список удаленных пользователей
$deletedUsers += $user.Name
}
}

# Выводим список удаленных пользователей для текущей группы
Write-Host "Удалены следующие пользователи из группы $groupName:"
$deletedUsers
}

Создать 10 групп в разных доменах и вложить одну в другую

Задача такая. Есть Корневой домен и дочерний. В дочернем домене нужно создать 10 групп безопасности с шаблонным названием и увеличенным порядковым номером с типом "Глобальная". В корневом домене тоже создать 10 доменных групп безопасности с шаблонным названием и увеличенным порядковым номером с типом "Локальная". Поместить группу из дочернего домена в группу корневого домена на основании имени и порядкового номера. Вот такой пример скрипта:

# Шаг 1: Взять путь к OU root.pyatilistnik.org/Groups/Printer/ и положить его в переменную 1
$ouPath1 = "OU=Printer,OU=Groups,DC=root,DC=Pyatilistnik,DC=org"

# Шаг 2: Создать 10 доменных глобальных групп с именем prn-prn01pyatilistnik-10-251-pr-g до prn-prn01pyatilistnik-10-261-pr-g в домене root.pyatilistnik.org
for ($i = 295; $i -le 305; $i++) {
$groupName = "prn-prn01pyatilistnik-10-$i-pr-g"
New-ADGroup -Name $groupName -GroupScope Global -Path $ouPath1 -Server dc1root.root.pyatilistnik.org
}

# Шаг 3: Взять путь к OU Pyatilistnik.org/Groups/Printer и положить его в переменную 2
$ouPath2 = "OU=Printer,OU=Groups,DC=Pyatilistnik,DC=org"

# Шаг 4: Создать 10 доменных локальных групп с именем prn-prn01pyatilistnik-10-251-pr-l до prn-prn01pyatilistnik-10-261-pr-l в домене pyatilistnik.org
for ($i = 295; $i -le 305; $i++) {
$groupName = "prn-prn01pyatilistnik-10-$i-pr-l"
New-ADGroup -Name $groupName -GroupScope DorootLocal -Path $ouPath2
}

Start-Sleep -Seconds 60 #Ждем минуту, чтобы корневой домен увидел существование групп в дочернем, иначе будет ошибка

# Шаг 5: Добавить глобальные группы из $ouPath1 в домене root.pyatilistnik.org в соответствующие локальные группы в домене pyatilistnik.org
for ($i = 295; $i -le 305; $i++) {
$globalGroupName = "prn-prn01pyatilistnik-10-$i-pr-g"
$localGroupName = "prn-prn01pyatilistnik-10-$i-pr-l"
Add-ADGroupMember -Identity $localGroupName -Members (Get-ADGroup -Identity $globalGroupName -Server dc1root.root.pyatilistnik.org)
}

Пуе-ADGroup: Создать 10 групп в разных доменах и вложить одну в другую

Автор - Сёмин Иван

One Response to Get-ADGroup: Управление группами Active Directory

  1. с:

    Единственный афффффффтор в русскоязычной сети да и части мировой у которого все работает. Пля! вводишь и работает)))) Хороший специалист прямо отличный ))) Дружище давай чо нибудь практическое — Астериск обнови, чо нибудь по сетям Удачи

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

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