Get-ADUser: получаем информацию о пользователях Active Directory из PowerShell

Get-ADUser это наиболее часто используемый администраторами PowerShell командлет для получения информации о пользователях Active Directory, значениях их атрибутов, таких как имена пользователей, email адреса, активность, членство в группах, контактной информации, должностях, организациях и т.д. С помощью командлета Get-ADUser можно вывести информацию о пользователях домена, выполнить запросы (фильтры) для выборки пользователей по критериям, и экспортировать отчеты о пользователях в CSV/TXT файлы для дальнейшего анализа.

Ранее для получения информации об учетных записях пользователей AD и их параметрах использовались графическая консоль ADUC (в том числе сохраненные запросы AD), vbs скрипты, утилита dsquery и т.п. Все эти инструменты может с лёгкостью заменить командлет Get-ADUser.

Командлет Get-ADUser в модуле PowerShell Active Directory

Чтобы использовать комадлет Get-ADUser для получения информации из AD, на компьютере должен быть установлен модуль Active Directory для PowerShell.

Этот модуль установлен по-умолчанию на контроллерах домена AD (ставится вместе с ролью Active Directory Domain Services, AD DS). Также модуль AD можно установить вручную на любом компьютере (входит в состав набора компонентов RSAT):

  • В Windows Server 2012R2 и выше: Install-WindowsFeature -Name RSAT-AD-PowerShell –IncludeAllSubFeature Установка модуля RSAT-AD-PowerShell
  • В Windows 11 и 10: Get-WindowsCapability -Name RSAT.ActiveDirectory* -Online | Add-WindowsCapability -Online

Проверьте, что модуль установлен, и если нужно, импортируйте его в свою сессию PowerShell:

Get-Module ActiveDirectory
Import-Module ActiveDirectory

Если модуль RSAT-AD-PowerShell отсутствует, при запуске команд Get-ADUser появится ошибка:

get-aduser : The term 'get-aduser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

команда get-aduser не найдена

Можно использовать модуль AD-PowerShell без установки RSAT на компьютере. Достаточно скопировать основные файлы и импортировать модуль в сессию PowerShell:

Import-Module "C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.resources.dll"

Вывести синтаксис и список всех доступных аргументов командлета Get-ADUser:

help Get-ADUser

Get-ADUser помощь по командлету

Get-ADUser: поиск пользователя AD и вывод атрибутов

Рассмотрим, как с помощью командлета Get-ADUser получить различную информацию о пользователях домена. Командлет может вывести данные как об одном, так и о нескольких пользователях AD.

Использовать командлета Get-ADUser для получения информации из AD можно под любым пользователем домена (не обязательно иметь права администратора или делегированные разрешения). Любой пользователь может просматривать значения. атрибуты объектов AD, кроме защищенных (см. пример с LAPS).

Вывести список всех учетных записей пользователей домена:

Get-ADUser -filter *

Get-ADUser -filter вывести всех пользователей домена

Важно. Не рекомендуется выполнять эту команду в доменах AD с большим количеством аккаунтов, т.к. это вызовет большую нагрузку на контроллер домена, предоставляющего данные.

Чтобы вывести свойства только определенного пользователя, используется параметр -Identity. В качестве аргумента нужно указать имя пользователя, SAMAccountName, Distinguished Name, SID или GUID.

Следующие команды вернут одинаковый результат об одном и том же пользователе:

Get-ADUser –Identity a.ivanov
Get-ADUser –Identity "CN=Andrey A. Ivanov,OU=Users,OU=SPB,OU=RU,DC=winitpro,DC=loc"

Get-ADUser –Identity "Andrey A. Ivanov"

get-aduser поиск пользователя по identity

По-умолчанию командлет Get-ADUser возвращает только 10 основных свойств пользователя (из более чем 120 атрибутов учетных записей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.

Чтобы вывести значения всех доступных атрибутах пользователя tuser, выполните команду:

Get-ADUser -identity tuser -Properties *

Get-ADUser -Properties * - вывести список всех атрибутов и значения доменного пользователя

Командлет Get-ADUser с параметром Properties * вывел список всех атрибутов пользователя AD и их значения (включая пустые). Аналогичный список атрибутов пользователей доступен в графической консоли Active Directory Users and Computers ( dsa.msc ) на вкладке редактора атрибутов.

Можно указать выбрать атрибуты, которые нужно выводить. Например, я хочу вывести информацию о том, просрочен ли пароль пользователя (Expired: True/False), время последней смены пароля, когда истекает срок действия пароля и время последнего входа в домен. Эти данные хранятся в следующих атрибутах учетной записи пользователя:

  • PasswordExpired
  • PasswordLastSet
  • PasswordNeverExpires
  • Lastlogontimestamp

Выполните команду:

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

Get-ADUser вывести дату смены пароля (PasswordLastSet) и время последнего входа в домен (lastlogontimestamp)

Чтобы оставить в выводе только указанные атрибуты, нужно отфильтровать их с помощью Select-Object -Property или Format-Table. Следующая команда выведет табличном виде информацию о статусе пароля для всех пользователей AD:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | Format-Table Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

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

Чтобы получить данные из AD через конкретный контроллер домена, используется параметр Server:

Get-ADUSer –Server DC01.winitpro.loc –Identity tstuser

Если нужно получить данные из другого домена, нужно указать имя сервера и учетные данные для доступа к нему через Credential:

$cred = Get-Credential
Get-ADUSer tstuser -Server DC01.newdomain.ru -Credential $Cred

Фильтрация пользователей AD с помощью Get-ADUser -Filter

С помощью параметра -Filter можно отфильтровать список пользователей по одному или нескольким атрибутам. Это удобно использовать для поиска пользователей в AD, у которых значения атрибутов соответствуют вашему запросу.

Например, выведем список активных (Enabled) учётных записей пользователей, чье имя содержит «Dmitry». Для этого используется фильтр с несколькими условиями. В данном примере атрибуты пользователей должны удовлетворять обоим условиям фильтра (-and):

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled

Filter командлета Get-AdUser, множественная фильтрация

Можно использовать все стандартные логические операторы PowerShell для выбора значений атрибутов пользователей ( -eq , -ne , -gt , -ge , -lt , -le , -like , -notlike , -and , -or , и т.д.)

С помощью Sort-Object можно отсортировать полученный список по определенному полю (атрибуту). Кроме того, для выборки пользователей можно использовать командлет Where-Object. Это позволяет создавать сложные запросы с несколькими фильтрами.

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=Moscow,DC=winitpro,DC=loc'| where {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser фильтр с помощью where-object

Совет. При выборке пользователей с помощью Get-ADUser с точки зрения скорости и производительности предпочтительнее задавать критерии с помощью атрибута Filter, а не командлет Where-Object. В этом случае фильтрации результатов выборки будет выполнятся на контроллере домена, и к вам на компьютер будет возвращаться меньший набор данных.

В запросах Get-ADUser можно использовать LDAP фильтры. Они указываются помощью атрибута -LdapFilter.

Get-ADUser -LDAPFilter '(&(department=it)(title=devops))'

Экспорт списка пользователей AD в текстовый или CSV/Excel файл

Cписок пользователей домена с их атрибутами, полученный с помощью команды Geet-ADUser можно выгрузить в текстовый файл:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

Или с помощью командлета Export-csv можно выгрузить пользователей в CSV файл, который в дальнейшем будет удобно экспортировать в Excel.

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | select Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\user-password-expires-2019.csv -Append -Encoding UTF8

Список пользователей AD можно экспортировать напрямую в Excel файл с помощью PowerShell.

Выгрузить адресную книгу email адресов компании в 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

Get-ADUser: часто используемые примеры команд

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

Вывести список email адресов пользователей в домене:

Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=MSK,DC=winitpro,DC=loc'| select-object Name, EmailAddress

Get-ADUser список email адресов

Вывести список активных пользователей с почтовыми адресами:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table

Список пользователей, у которых отсуствует email адрес:

Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null

Вывести активных пользователей, у которых в свойствах не задан отдел (department):

Get-AdUser -Filter "Enabled -eq 'True'" -Properties * |where Department -eq $null|select name,enabled,Department

Чтобы вывести пользователей только из определенного контейнера домена (Organizational Unit), воспользуйтесь параметром SearchBase

Get-ADUser -SearchBase 'OU=Moscow,DC=winitpro,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Выбрать пользователей сразу из нескольких OU, используйте следующую конструкцию:

$OUs = "OU=Moscow,DC=winitpro,DC=local","OU=SPB,DC=winitpro,DC=loc"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}

Вывод пользователей 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 * -Properties Name, WhenCreated | Select name, whenCreated

Вывести всех пользователей, которые были созданы за последние 24 часа:

$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}

Список учетных записей с истекшим сроком действия пароля (срок действия пароля настраивается в доменной политике паролей):

Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired | where {$_.PasswordExpired}|select name,passwordexpired

Пользователи, которые не меняли свой пароль в течении последних 90 дней:

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}

Найти неактивные учетные записи пользователей (не входили в домен более 180 дней). Для получения информации об истории входов пользователей в домен используется атрибут lastLogonTimpestamp:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } | ?{$_.Enabled –eq $True} |  Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize

Чтобы получить фотографию пользователя из 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

Вывести список пользователей из OU, которые состоят в определенной группе безопасности:

Get-ADUser -SearchBase 'OU=Moscow,DC=winitpro,DC=loc' -Filter * -properties memberof | Where-Object {($_.memberof -like "*WKS admins*")}

Командлеты Get-AdUser и Add-ADGroupMember можно использовать для создания динамических групп пользователей AD (в зависимости от города, должности или департамента).

Задача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетной записи в строке), нужно получить телефон пользователя из AD и выгрузить информацию CSV файл (для дальнейшего формирования отчета в Exсel).

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
}

Вывести всех пользователей из OU, кроме членов определенной группы:

$Users = Get-ADUser -filter * -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}

Экспортировать пользователей из AD с указанием имени OU (где они находятся) в графическую таблицу Out-GridView:

get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView

get-aduser экспорт списка пользоватетелей Active Directoryв таблицу out-gridview

Проверить, что пользователь AD существует:

$SamAccountName='a.ivanov2'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{  Write-Host "Пользователь $SamAccountName не существует"}

Вывести список компьютеров домена, на которые разрешено входить пользователю (ограничение через атрибут LogonWorkstations):

Get-ADUser AIvanov -Properties LogonWorkstations | Format-List Name, LogonWorkstations

Совет. Для получения данных о компьютерах Active Directory используется командлет Get-ADComputer.

Предыдущая статья Следующая статья


Комментариев: 224 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)