7 Декабря, 2016

Скрипты выгрузки всех пользователей из MS Active Directory (ITGC)

Иван Пискунов
Одной из стандартных процедур проведения аудита ITGC для каталога Active Directory является получение выгрузки всех пользователей домена. На основании полученных данных далее формируются процедуры тестирования, к примеру изучение списка администраторов или выявление пользователей с истекшим паролем.  Наиболее эффективным для формирования такой выгрузки будет использование стандартного интерфейса PowerShell, примеры которого мы и рассмотрим в данной статье

1. Экспресс выгрузка скриптом на PowerShell

Ниже представлен скрипт PowerShell, как один из наиболее простых и быстрых способов получить  список всех пользователей  домена AD в  формате CSV, который без проблем открывается тем же Excel'ем.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Количество учетных записей $users.Count $users | ForEach-Object { $user = $_.Properties New-Object PsObject -Property @{ Должность = [string]$user.description Отдел = [string]$user.department Логин = [string]$user.userprincipalname Телефон = [string]$user.telephonenumber Комната = [string]$user.physicaldeliveryofficename ФИО = [string]$user.cn } } | Export-Csv -NoClobber -Encoding utf8 -Path С:list_domen_users.csv
Для того что бы скрипт отработал на вашей системе, необходимо его чуть подкорректировать, а именно вписать необходимые параметры, т.е. как в данном примере это параметры Users в подразделении Departments в домене Test.ru. А так же указать путь к месту сохранения файла list_domen_users.csv

После выгрузки, если сразу открыть list_domen_users.csv, будет выглядеть в не читабельном виде, однако, станалртыми средствами мы легко его приведем в нужный нам формат. Открываем в Excel list_domen_users.csv, выделяем первый столбец , затем заходим во вкладку "Данные" и нажимаем "Текст по столбцам". Выбираем "с разделителями" и нажимаем "Далее". Готово!

!Необходимо заметить, что  данный скрипт не отобразит более 1000 пользователей. Для небольшой компании вполне подойдет,  а тем же у кого в домене огромное количество пользователей стоит прибегнуть к методам описанным ниже.

2. Продвинутый командлет PowerShell для получения выгрузки пользователей Active Directory
Инструмент Active Directory Module for Windows PowerShell (представлен в Windows Server 2008 R2 и выше), позволяет формировать командлеты которые выполняют различные манипуляции с объектами каталога AD. Для получения информации о пользователях и их свойствах предназначен командлет Get-ADUser.

Для начала запускаем окно Powershell с правами администратора и импортируем модуль Active Directory  для дальнейших действия:
Import-Module activedirectory
Чтобы вывести список всех учетных записей домена, выполним команду:
Get-ADUser -filter *
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполним команду

Get-ADUser -identity tuser -properties *

К примеру, нас интересует информация о дате смены пароля и времени, когда он истечет. Результат выполнения команды можно выгрузить в текстовый файл:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt
Или сразу выгрузить в CSV, который в дальнейшем будет удобно экспортировать в Excel (дополнительно с помощью sort-object отсортируем таблицу по столбцу PasswordLastSet , а также добавим условие where – имя пользователя должно содержать строку «Dmitry»)

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like “*Dmitry*”} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv



Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory:
Чтобы подсчитать общее количество всех аккаунтов в 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}
Пользователи, которые не меняли свой пароль в течении последних 90 дней:
$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}
Заключение

Выше приведенные примеры безусловно не исчерпывают всех возможностей предоставляемых PowerShell. Для тех, кому тема показалась интересной может самостоятельно более подробно ознакомится с другими фичами в статьях Типовые задачи администрирования AD и 10 задач администрирования Active Directory опубликованной на Хабре.