У цій статті ми розглянемо можливості PowerShell з управління групами домену Active Directory. Ми розглянемо, як створити нову групу в AD, додати в неї користувачів (або видалити), вивести список користувачів групи і кілька інших корисних дії з доменними групами, які надзвичайно корисні при повсякденному адмініструванні. Для управління групами AD в модулі PowerShell для Active Directory є наступні основні командлети:
зміст:
- New-ADGroup - створюємо нову групу AD
- Add-AdGroupMember - додати користувачів до групи AD
- Remove-ADGroupMember - видалити користувачів з групи
- Get-ADGroup - отримати інформацію про групу AD
- Get-ADGroupMember - вивести список користувачів групи AD
Для використання даних командлетів у вашій сесії PowerShell повинен бути завантажений спеціальний модуль взаємодії з AD - Active Directory Module for Windows PowerShell. Даний модуль вперше був представлений в Windows Server 208 R2. У Windows Server 2012 і вище цей модуль включений за замовчуванням. На клієнтських комп'ютерах його можна встановити і включити в якості одного з компонентів RSAT. Перевірити, завантажений чи модуль можна так:
Get-Module -Listavailable
Як ви бачите, модуль ActiveDirectory завантажений. Якщо немає - імпортуйте його командою:
Import-Module activedirectory
Повний список команд модуля можна отримати так:
Get-Command -Module ActiveDirectory
У модулі всього доступно 147 командлетів, з яких з групами можуть працювати 11.
Get-Command -Module ActiveDirectory -Name "* Group *"
Ось їх список:
- Add-ADGroupMember
- Add-ADPrincipalGroupMembership
- Get-ADAccountAuthorizationGroup
- Get-ADGroup
- Get-ADGroupMember
- Get-ADPrincipalGroupMembership
- New-ADGroup
- Remove-ADGroup
- Remove-ADGroupMember
- Remove-ADPrincipalGroupMembership
- Set-ADGroup
New-ADGroup - створюємо нову групу AD
Створимо нову групу в зазначеному контейнері (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
Add-AdGroupMember - додати користувачів до групи AD
Додати користувачів до групи Active Directory можна за допомогою командлета Add-AdGroupMember. Додамо в нову групу двох користувачів:
Add-AdGroupMember -Identity TestADGroup -Members user1, user2
Якщо список користувачів, яких потрібно додати в групу досить великий, можна зберегти список облікових записів в CSV файл, потім імпортувати цей файл і додати кожного користувача в групу.
Формат 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 $ _
Remove-ADGroupMember - видалити користувачів з групи
Для видалення користувачів з групи AD потрібно використовувати командує Remove-ADGroupMember. Видалимо з групи двох користувачів:
Remove-ADGroupMember -Identity TestADGroup -Members user1, user2
Підтвердіть видалення користувачів з групи:
Якщо потрібно видалити з групи користувачів за списком з CSV файлу, скористайтеся такою командою:
Import-CSV. \ Users.csv -Header users | ForEach-Object Remove-ADGroupMember -Identity 'TestADGroup' -members $ _. Users
Get-ADGroup - отримати інформацію про групу AD
Отримати інформацію про групу допоможе командлет Get-ADGroup:
Get-ADGroup 'TestADGroup'
Даная команда виводить інформацію про основні атрибути групи (DN, тип групи, ім'я, SID). Щоб вивести значення всіх атрибутів групи домену AD, виконайте таку команду:
Get-ADGroup 'TestADGroup' -properties *
Як ви бачите, тепер стали відображатися такі атрибути, як час створення і модифікації групи, опис тощо.
За допомогою командлета Get-ADGroup можна знайти всі ваші групи за певним шаблоном. Наприклад, потрібно знайти всі групи AD, в імені яких міститься фраза admins :
Get-ADGroup -LDAPFilter "(name = * admins *)" | Format-Table
Get-ADGroupMember - вивести списку користувачів групи AD
Вивести на екран список користувачів групи:
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: \ ps \ admins.csv
Щоб додати в текстовий файл дані облікових записів користувачів в AD, скористаємося Командлети Get-ADUser. Наприклад, крім облікового запису потрібно вивести посаду і телефон користувача групи:
Get-ADGroupMember -Identity 'server-admins' -recursive | foreach Get-ADUser $ _ -properties title, OfficePhone | Select-Object title, OfficePhone
Порахувати кількість користувачів в групі можна так:
(Get-ADGroupMember -Identity 'domain admins'). Count
Виявилося, що в групі "domain admins" у нас складається 7 облікових записів адміністраторів.
Щоб знайти список порожніх груп в певному OU, скористайтеся такою командою:
Get-ADGroup -Filter * -Properties Members -searchbase "OU = Moscow, DC = corp, dc = winitpro, DC = ru" | where -not $ _. members | select Name