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

Import-Module "C:PSADPoShMicrosoft.ActiveDirectory.Management.dll"
Import-Module "C:PSADPoShMicrosoft.ActiveDirectory.Management.resources.dll"
Вывести синтаксис и список всех доступных аргументов командлета Get-ADUser:
help Get-ADUser

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

Чтобы вывести свойства только определенного пользователя, используется параметр -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 возвращает только 10 основных свойств пользователя (из более чем 120 атрибутов учетных записей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.
Чтобы вывести значения всех доступных атрибутах пользователя tuser, выполните команду:
Get-ADUser -identity tuser -Properties *

dsa.msc ) на вкладке редактора атрибутов.Можно указать выбрать атрибуты, которые нужно выводить. Например, я хочу вывести информацию о том, просрочен ли пароль пользователя (Expired: True/False), время последней смены пароля, когда истекает срок действия пароля и время последнего входа в домен. Эти данные хранятся в следующих атрибутах учетной записи пользователя:
- PasswordExpired
- PasswordLastSet
- PasswordNeverExpires
- Lastlogontimestamp
Выполните команду:
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

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

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

Можно использовать все стандартные логические операторы 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 можно использовать 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:tempusers.txt
Или с помощью командлета Export-csv можно выгрузить пользователей в CSV файл, который в дальнейшем будет удобно экспортировать в Excel.
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | select Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:tempuser-password-expires-2019.csv -Append -Encoding UTF8
Выгрузить адресную книгу 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:tempmail_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 -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*")}
Задача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетной записи в строке), нужно получить телефон пользователя из AD и выгрузить информацию CSV файл (для дальнейшего формирования отчета в Exсel).
Import-Csv c:psusernsme_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
Select Name, telephoneNumber |
Export-CSV c:psexport_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

Проверить, что пользователь 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

Добавить комментарий