Управление группами 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 загружен. Если нет – импортируйте его командой:
Import-Module activedirectory
Выведем список командлетов PowerShell, позволяющих управлять группами AD:
Get-Command -Module ActiveDirectory -Name "*Group*"
Доступно 11 командлетов:
- 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 изменить отображаемое имя.
Параметром 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
При создании группы 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
Если нужно добавить в группу сразу большое количество пользователей, вы можете сохранить список учетных записей в CSV файл, затем импортировать данный файл и добавить каждого пользователя в группу с помощью простого PowerShell скрипт.
В нашем примере используется следующий формат CSV файла (список пользователей по одному в строке, имя столбца – users)
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.
Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:
Import-CSV .users.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users}
Get-ADGroup: получить информацию о группе AD
Для получения информации о группе домена AD используйте командлет Get-ADGroup:
Get-ADGroup 'TestADGroup'
Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID группы). Чтобы вывести значение всех атрибутов группы, выполните команду:
Get-ADGroup 'TestADGroup' -properties *
Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.
Вы можете использовать командлет Get-ADGroup для поиска групп в AD по шаблону (маске). Например, следующие команды можно использовать чтобы найти все группы AD, в имени которых содержится фраза adminsGet-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
Если в данную группу включены другие группы домена, чтобы вывести полный список членов, в том числе всех вложенных групп, воспользуйтесь параметром 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
Чтобы найти список пустых групп в определенном 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
Remove-ADGroup: удалить группу AD
Чтобы удалить групп в Active Directory используется командлет Remove-ADGroup:
Remove-ADGroup -Identity MskSales
При удалении группы появляется запрос подтверждения удаления. Чтобы отключить подтверждение удаления, добавьте параметр Confirm:
Remove-ADGroup -Identity MskSales –Confirm:$false
PowerShell
Управление группами Active Directory с помощью PowerShell