Управление пользователями в Active Directory с помощью PowerShell
Домен Active Directory может содержать в себе сотни и даже тысячи учетных записей, и для управления всеми этими аккаунтами администратору требуется значительное количество времени. Даже если у нас уже все аккаунты разнесены по группам, ко всем группам применены политики и настроены права доступа, все равно могут возникнуть ситуации, когда по тем или иным причинам нам необходимо найти полную информацию о пользователе.
Идентификация пользователей в Active Directory
У вас есть несколько вариантов того, как идентифицировать пользователя в Active Directory: можно использовать Distinguished Name (DN), Globally Unified Identifier (GUID), идентификатор безопасности (SID) или имя учетной записи Security Account Manager (SAM). О том, как можно использовать эти варианты на практике, мы поговорим чуть дальше, а пока нам надо подготовить нашу инфраструктуру PowerShell для работы с Active Directory.
Установка RSAT для работы с Active Directory через PowerShell
Второй способ установки Remote Server Administration Tools (RSAT) еще проще. Мы можем воспользоваться функционалом самого PowerShell для установки непосредственно с узла Windows Update.
Add-WindowsCapability –online –Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0Использование PowerShell для работы с Active Directory
Не секрет, что начиная с первой версии PowerShell, Microsoft пытается сделать из него основной инструмент администрирования Windows. И во многом это получается! Сегодня на простых примерах, мы покажем возможности PowerShell, которые можно использовать для получения различной информации о пользователях Active Directory и их атрибутах.
Импорт модуля Active Directory в PowerShell
Запускаем окно PowerShell с правами администратора и импортируем модуль Active Directory командой:
Import-Module activedirectoryСовет: В Windows Server 2012 и выше этот пункт можно пропустить, так как модуль PowerShell Active Directory подключен по-умолчанию.
Получение информации о пользователях
Чтобы вывести список всех учетных записей домена, выполним команду:
Get-ADUser -Filter *Важно: Не рекомендуется выполнять эту команду в доменах с большим количеством аккаунтов, так как это может вызвать перегрузку контроллера домена, предоставляющего данные.
Получение дополнительной информации о пользователе
Чтобы получить дополнительную информацию о пользователе, можно использовать команду:
Get-ADUser -Identity tuser -Properties PasswordExpired, PasswordLastSet, PasswordNeverExpiresЭти команды позволяют управлять пользователями в Active Directory с помощью PowerShell, что значительно упрощает администрирование системы.
## Получение информации о смене и истечении срока действия пароля в AD

Теперь в данных пользователя есть информация о дате смены пароля и времени, когда срок пароля истечет. Представим информацию в более удобном табличном виде:
```powershell
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpiresGet-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Вывод данных пользователей из определенной OU
Чтобы вывести данные пользователей из определенной OU, воспользуемся параметром SearchBase:
Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpiresРезультат выполнения команды можно выгрузить в текстовый файл:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txtЭкспорт в CSV
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like “*Dmitry*”} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\user-password-expires-2015.csv
Таким образом, можно построить таблицу с любыми необходимыми атрибутами пользователей Active Directory.
Совет. Для получения данных о компьютерах Active Directory используется командлет Get-ADComputer.
Дополнительные запросы о пользователях Active Directory
Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory с помощью различных фильтров. Вы можете их комбинировать для получения необходимого списка пользователей AD:
- Вывод пользователей AD, имя которых начинается с Roman:
Get-ADUser -filter {name -like Roman*}- Подсчет общего количества всех аккаунтов в Active Directory:
Get-ADUser -Filter {SamAccountName -like *} | Measure-Object- Список всех активных (не заблокированных) учетных записей в AD:
Get-ADUser -Filter {Enabled -eq True} | Select-Object SamAccountName, Name, Surname, GivenName | Format-Table- Список учетных записей с истекшим сроком действия пароля:
Get-ADUser -filter {Enabled -eq $True} -properties passwordExpired | where {$_.PasswordExpired}- Список активных учеток с почтовыми адресами:
Get-ADUser -Filter {Enabled -eq True} -Properties EmailAddress | Where-Object { $_.EmailAddress -ne $null }Получение информации о пользователях из Active Directory
Для получения информации о пользователях из Active Directory с использованием PowerShell можно использовать различные командлеты. Ниже приведены примеры командлетов для получения различной информации о пользователях.
Получение списка пользователей с почтовыми ящиками
Для получения списка пользователей, у которых заполнено поле электронной почты, и которые включены в домене, можно воспользоваться следующей командой:
Get-ADUser -Filter {(mail -ne null) -and (Enabled -eq true)} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-TableПолучение информации о телефонах пользователей из файла
Для получения информации о телефонах пользователей из списка, хранящегося в текстовом файле, и выгрузки информации в CSV файл, можно воспользоваться следующим скриптом:
Import-Csv c:\ps\usernsme_list.csv | ForEach { Get-ADUser -identity $_.user -Properties Name, telephoneNumber | Select Name, telephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8
}Экспорт адресной книги предприятия в CSV файл
Для экспорта адресной книги предприятия в формате CSV, который можно импортировать в Outlook или Mozilla Thunderbird, используйте следующую команду:
Get-ADUser -Filter {(mail -ne null) -and (Enabled -eq true)} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter , $env:temp\mail_list.csvПолучение списка пользователей, не менявших пароль за последние 90 дней
Для получения списка пользователей, которые не меняли свой пароль в течение последних 90 дней, можно воспользоваться следующим скриптом:
$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}Получение фотографии пользователя из Active Directory
Для получения фотографии пользователя из Active Directory и сохранения ее в файле JPG используйте следующий код:
$user = Get-ADUser winadmin -Properties thumbnailPhoto
$user.thumbnailPhoto | Set-Content winadmin.jpg -Encoding byteПолучение списка групп, в которых состоит пользователь
Для получения списка групп, в которых состоит учетная запись пользователя, используйте следующий скрипт:
Get-AdUser winadmin -Properties memberof | Select memberof -expandproperty memberofФильтрация базы пользователей
Для избежания ситуации, когда объектов слишком много, используйте параметр -filter для фильтрации объектов Active Directory. Ниже приведен пример фильтрации активных аккаунтов:
Get-ADUser -Filter {(Enabled -eq true)}Таким образом, можно использовать различные командлеты PowerShell для получения информации о пользователях из Active Directory. Каждая команда выполняет определенные задачи и помогает упростить администрирование пользовательскими учетными записями.
Давайте еще сократим нагрузку на нашу инфраструктуру AD ограничив поиск только по определенным Organizational Unit (OU). Для этого воспользуемся параметром -SearchBase.
Еще один полезный пример использования -Properties это получение списка пользователей со временем создания их аккаунтов.
## Что за командлет Get-ADuser
Он может использоваться для выполнения различных задач, включая:
- **Получение списка пользователей Active Directory**: Вы можете использовать командлет Get-ADUser без параметров, чтобы получить список всех пользователей в домене Active Directory.
- **Фильтрация пользователей по определенным критериям**: Позволяет фильтровать пользователей по различным атрибутам, таким как имя, фамилия, логин, почта и т. д. Вы можете использовать параметр -Filter для определения критериев фильтрации.
- **Получение специфической информации о пользователях**: Командлет Get-ADUser позволяет получить специфическую информацию о пользователях группы, свойства профиля и т. д. Вы можете использовать параметр -Properties для указания необходимых свойств пользователя.
- **Проверка статуса активности пользователей**: Может использоваться для проверки статуса активности пользователей. Вы можете использовать свойство Enabled для определения, активирован ли учетная запись пользователя.
- **Автоматизация задач в Active Directory**: Может быть включен в скрипты PowerShell для автоматизации задач в Active Directory. Например, вы можете использовать его для получения списка пользователей и выполнения определенных действий на основе этой информации.
- **Интеграция с PowerShell**: Командлет Get-ADUser является частью модуля Active Directory для PowerShell, что обеспечивает единый и удобный интерфейс для автоматизации задач в Active Directory. PowerShell предоставляет мощные возможности для обработки данных и выполнения сложных операций.
- **Гибкость и масштабируемость**: Позволяет гибко фильтровать пользователей и получать только необходимую информацию. Он также может быть легко интегрирован в скрипты PowerShell для выполнения сложных задач в Active Directory.
- **Удобство использования**: Командлет предоставляет простой и понятный синтаксис, который легко понять и использовать даже для новичков в PowerShell.
- **Информативность вывода**: Возвращает объекты пользователей Active Directory, которые содержат полезную информацию о пользователях. Это позволяет легко обрабатывать и анализировать полученные данные для последующего импорта их в различные системы.
## Как получить у списка пользователей адреса электронной почты
Постановка задачи, для списка ФИО сотрудников необходимо получить их адреса электронной почты. Это реальная ситуация, когда необходимо сделать рассылку по определенным сотрудникам:
1. Берем список ФИО пользователей Active Directory из файла по указанному пути
2. Далее у каждого из них получаем атрибут mail (именно он содержит значение e-mail)
3. Выводим список mail адресов и сохраняем его в файл по указанному пути
## Добавляем email-адрес в массив
$mailList += $mail}
Предполагается, что у вас установлен модуль Active Directory для PowerShell. Если его нет, установите его с помощью команды Install-Module -Name ActiveDirectory. Можно данный код просто выполнять на контроллере домена.

Reset Password for AD Users
Set-ADAccountPassword –Identity “CN=TestUser7,CN=Users,DC=www,DC=DOC,DC=com” –SamAccountName “TestUser7” –LogonWorkStations “Test”
Some of the acceptable parameters for this CMDlet are listed below.
Removing a Active Directory User Account
Remove-ADUser –Identity “CN=Username,CN=Users,DC=doc,DC=com”

Press Y to confirm the action.
Creating Bulk Users in Active Directory

Import-CSV d:\Share\testing.csv | New-ADUser

After completing the action, you’ll return to the same prompt.


Как получить у списка пользователей значения Company и Department
Получить список логинов Active Directory из файла, расположенного по пути и положить их переменную
Найти среди этих логинов те, что имеют {Enabled -eq "True"} (Выключены) и помещаем их в переменную
Для каждого логина из 2 шага получить значения полей Company и Department
Полученные данные выгрузить в файл по указанному пути, в виде логин, Company, Department


Приступим к поискам
Для поиска данных о пользователях в AD мы будем использовать параметр -Identity. Откроем модуль Active Directory Module for Windows Powershell в режиме Администратора.
Для начала поищем пользователя по его атрибуту sAMAccountName
В результате выполнения команды мы получили значения основных полей из AD для данного пользователя. Но мы можем также поискать пользователя по другим параметрам. Например, предположим, что нам известно только значение поля objectGUID (или GUID). В таком случае команда будет иметь следующий вид:
Create a Single User in Active Directory
New-ADUser –SamAccountName “username” –DisplayName “username” –givenName “Username” –Surname “surname” –AccountPassword (ReadHost –AsSecureString “Message”) –Enabled $true –Path ‘CN=Users,DC=Doc,DC=Com’ –CannotChangePassword $false –ChangePasswordAtLogon $true –PasswordNeverExpires $false -EmailAddress “email” –EmployeeID “ID” –Department “string”
Below are the descriptions of parameters used in the above CMDlet
After executing the command, the PowerShell will ask for the password.

Modify Users in Active Directory
Set-ADUser –Identity “CN=TestUser7,CN=Users,DC=www,DC=DOC,DC=com” –SamAccountName “TestUser7” –LogonWorkStations “Test”
Some of the available parameters for this CMDlet are listed below.
Заключение
В этой статье мы рассмотрели полезные на практике примеры работы с Active Directory с помощью PowerShell. В следующей статье мы поговорим о том, как PowerShell может помочь при анализе журналов событий.
Также хочу пригласить вас на бесплатный урок: "Написание скриптов на PowerShell и их использование", который пройдет уже в понедельник.




