Аудит пользователей ad с помощью powershell

Управление пользователями в 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
![Get-ADUse - время смены и истечения срока действия пароля в AD](http://winitpro.ru/wp-content/uploads/2015/05/Get-ADUser-PasswordExpired.jpg)
Теперь в данных пользователя есть информация о дате смены пароля и времени, когда срок пароля истечет. Представим информацию в более удобном табличном виде:
```powershell
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser - табличное представление о свойствах пользователей

Вывод данных пользователей из определенной 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

Get-ADUser с условием where и сохранением в 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. Можно данный код просто выполнять на контроллере домена.

:/>  Telnet windows проверка порта

Get-ADComputer файл со списком email

Reset Password for AD Users

Set-ADAccountPassword –Identity “CN=TestUser7,CN=Users,DC=www,DC=DOC,DC=com” –SamAccountName “TestUser7” –LogonWorkStations “Test”

Reset Password

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”

Remove User

Remove Confirmation

Press Y to confirm the action.

Creating Bulk Users in Active Directory

bulk users in CSV

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

Creating Bulk Users

Bulk User Creation Process

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

Prompt

New Users in AD

Как получить у списка пользователей значения Company и Department

  1. Получить список логинов Active Directory из файла, расположенного по пути и положить их переменную

  2. Найти среди этих логинов те, что имеют {Enabled -eq "True"} (Выключены) и помещаем их в переменную

  3. Для каждого логина из 2 шага получить значения полей Company и Department

  4. Полученные данные выгрузить в файл по указанному пути, в виде логин, Company, Department

Файл со списком логинов Active Directory

Get-ADuser файл с полученными 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”

Create New User

Below are the descriptions of parameters used in the above CMDlet

After executing the command, the PowerShell will ask for the password.

:/>  Как найти файл и проверить, существует он с помощью powershell или netwrix auditor

Enter Password

Modify Users in Active Directory

Set-ADUser –Identity “CN=TestUser7,CN=Users,DC=www,DC=DOC,DC=com” –SamAccountName “TestUser7” –LogonWorkStations “Test”

Modify User in AD

Some of the available parameters for this CMDlet are listed below.

Заключение

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

Также хочу пригласить вас на бесплатный урок: "Написание скриптов на PowerShell и их использование", который пройдет уже в понедельник.