Управление группами Active Directory с помощью PowerShell

Управление группами Active Directory с помощью PowerShell

Для управления группами в Active Directory не обязательно использовать графическую оснастку Active Directory Users and Computer (ADUC). Вы можете выполнять все действия по управлению группами в домене Active Directory из командной строки PowerShell. В этой статье мы рассмотрим, как с помощью PowerShell создать новую группу в AD, добавить в нее пользователей (или удалить), вывести/экспортировать список пользователей группы и другие полезные команды, которые часто используются при администрировании AD.

Для управления группами AD нужно использовать специальный модуль — Active Directory Module for Windows PowerShell. Модуль RSAT-AD-PowerShell доступен во всех версиях Windows Server (начиная с Windows Server 2008R2), а в десктопных Windows 10 и Windows 11 он устанавливается как компонент RSAT.

Проверьте, загружен ли модуль AD в текущую сессию PowerShell:

Get-Module -Listavailable

проверака наличия модуля activedirectory

Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:

Import-Module activedirectory

Выведем список командлетов PowerShell, позволяющих управлять группами AD:

Get-Command -Module ActiveDirectory -Name "*Group*"

Доступно 11 командлетов:

командлеты PowerShell для управления группами Active Directory

  • Add-ADGroupMember
  • Add-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • New-ADGroup
  • Remove-ADGroup
  • Remove-ADGroupMember
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

New-ADGroup: создать новую группу в Active Directory

Создадим новую группу безопасности в указанном контейнере (OU) Active Directory с помощью команды New-ADGroup:

New-ADGroup "TestADGroup" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupScope Global -PassThru –Verbose

С помощью атрибута Description можно задать описание группы, а с помощью DisplayName изменить отображаемое имя.

New-ADGroup – создаем новую группу AD

Параметром GroupScope можно задать один из следующих типов групп:

  • 0 = DomainLocal
  • 1 = Global
  • 2 = Universal

Создать группу распространения можно так:

New-ADGroup "TestADGroup-Distr" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Группы распространения (distribution) можно использовать для рассылки писем и/или предоставления прав доступа в AD. Подробнее о группах рассылки Exchange здесь.

При создании группы AD можно сразу заполнить любые атрибуты. Проще всего задать значения различных атрибутов группы через HashTable:

$attrs = @{"mail"="[email protected]";"displayname"="ALL MSK Admins"}
New-ADGroup -Name MSKAdmins -GroupScope Global -OtherAttributes $attrs

Add-AdGroupMember: добавить пользователей в группу Active Directory

Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember. Добавим в новую группу двух пользователей:

Add-AdGroupMember -Identity TestADGroup -Members user1, user2

Add-AdGroupMember

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

В нашем примере используется следующий формат CSV файла (список пользователей по одному в строке, имя столбца – users)

добавить в группу AD пользователей из csv файла

Import-CSV .users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}

Чтобы получить всех членов одной группы (groupA) и добавить их в другую группу (groupB), воспользуйтесь такой командой:

Get-ADGroupMember “GroupA” | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “Group-B” -Members $_}

Если нужно скопировать в новую группу и членов всех вложенных групп (рекурсивно), нужно воспользоваться такой командой:

Get-ADGroupMember -Identity “GroupA” -Recursive | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “GroupB” -Members $_}

В версии Active Directory, представленной в Windows Server 2016 можно использовать функцию временного членства в группах безопасности AD (Temporary/ Time Based Group Membership). Чтобы временно добавить пользователя в группу AD (например, на 2 часа), выполните команду:

$ttl = New-TimeSpan -Hours 2
Add-ADGroupMember -Identity "Domain Admins" -Members a.ivanov -MemberTimeToLive $ttl

Через 2 часа этот пользователь будет автоматически удален из данной группы.

Remove-ADGroupMember: удалить пользователей из группы

Для удаления пользователей из группы AD нужно использовать командлет Remove-ADGroupMember. Удалим из группы двух пользователей:

Remove-ADGroupMember -Identity TestADGroup -Members user1, user2

Подтвердите удаление пользователей, нажав Y -> Enter.

Remove-ADGroupMember

Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:

Import-CSV .users.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users}

В on-prem Active Directory отсутствует возможность создать динамические группы пользователей (в отличии от Azure AD). Однако вы можете создать небольшой PowerShell скрипт, который будет автоматически добавлять или удалять пользователей из группы с помощью командлетов Add-ADGroupMember и Remove-ADGroupMember. Подробнее об этом в статье Динамические группы пользователей Active Directory с помощью PowerShell.

Get-ADGroup: получить информацию о группе AD

Для получения информации о группе домена AD используйте командлет Get-ADGroup:

Get-ADGroup 'TestADGroup'

Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID группы). Чтобы вывести значение всех атрибутов группы, выполните команду:

Get-ADGroup 'TestADGroup' -properties *

Get-ADGroup информация о группе AD

Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.

Вы можете использовать командлет Get-ADGroup для поиска групп в AD по шаблону (маске). Например, следующие команды можно использовать чтобы найти все группы AD, в имени которых содержится фраза admins
Get-ADGroup -LDAPFilter “(name=*admins*)” | Format-Table

Или

Get-ADGroup -Filter {name -like "*admins*"} -Properties Description,info | Select Name,samaccountname,Description,info

(в первой команде используется LDAP фильтр, во второй фильтр по атрибуту AD):
С помощью Get-ADGroup можно получить список членов группы (хранится в атрибуте members):

Get-ADGroup -Identity "Domain Admins" -Properties members | Select-Object -ExpandProperty members

Однако для получения списка членов группы гораздо удобнее использовать другой командлет — Get-ADGroupMember.

Get-ADGroupMember: вывести список пользователей в группе Active Directory

Командлет Get-ADGroupMember позволяет получить членов группы AD. Это могут быть пользователи, компьютеры, другие группы или учетные записи служб (MSA/gMSA).

Вы можете вывести на экран список пользователей в доменной группе:

Get-ADGroupMember 'TestADGroup'

Чтобы оставить в результатах только имена пользователей, выполните:

Get-ADGroupMember 'TestADGroup'| ft name

Get-ADGroupMember - получить список членов группы Active Directory

Если в данную группу включены другие группы домена, чтобы вывести полный список членов, в том числе всех вложенных групп, воспользуйтесь параметром Recursive.

Get-ADGroupMember ‘server-admins' -recursive| ft name

Чтобы экспортировать список пользователей, состоящих в определённой группе в CSV файл (для дальнейшего использования в Excel), выполните команду:

Get-ADGroupMember ‘server-admins' -recursive| ft samaccountname| Out-File c:psadmins.csv

Вы можете экспортировать в текстовый файл и другие атрибуты пользователей AD. Для получения атрибутов пользователя используется командлет Get-ADUser. Например, кроме имени учетной записи, можно вывести UserPrincipalName, должность и телефон пользователя группы:

Get-ADGroupMember -Identity ’server-admins’ -recursive| foreach { Get-ADUser $_ -properties UserPrincipalName, title, OfficePhone|Select-Object title, OfficePhone }

Посчитать количество пользователей в группе можно так:

(Get-ADGroupMember -Identity 'domain admins').Count

Get-ADGroupMember количесвто пользователей в группе

Чтобы найти список пустых групп в определенном OU, воспользуйтесь такой командой:

Get-ADGroup -Filter * -Properties Members -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru”  | where {-not $_.members} | select Name

С помощью командлета Get-ADGroupMember можно создать простой PowerShell скрипт для оповещения администратора, если кто-то добавил нового пользователя в определенную группу AD.

Set-ADGroup: изменить атрибуты группы AD

Командлет Set-ADGroup позволяет изменить свойства (атрибуты) любой группы Active Directory. Например, можно изменить описание и название группы:

Set-ADGroup -Identity MSKAdmins -Description “New Admin Group Description”

или так:

Get-ADGroup -Identity MSKAdmins | Set-ADGroup -Description “New Admin Group Description v2”

Скрыть определённую группу из адресной книги Exchange:

Set-ADGroup –id mskadmins -replace @{hideDLMembership=$true}

Можно изменить сразу несколько параметров группы. Список изменения удобно задать через HashTable:

Список атрибутов можно получить так или в консоли ADUC на вкладке редактора атрибутов

$attrs = @{"mail"="[email protected]";"displayname"="ALL MSK Admins"}
Set-ADGroup -Identity MSKAdmins –Add $attrs

set-adgroup изменить атрибуты группы active directory с помощью powershell

Remove-ADGroup: удалить группу AD

Чтобы удалить групп в Active Directory используется командлет Remove-ADGroup:

Remove-ADGroup -Identity MskSales

remove-adgroup удалить группу в AD

При удалении группы появляется запрос подтверждения удаления. Чтобы отключить подтверждение удаления, добавьте параметр Confirm:

Remove-ADGroup -Identity MskSales –Confirm:$false

PowerShell
Управление группами Active Directory с помощью PowerShell