Get-ADUser это наиболее часто используемый администраторами PowerShell командлет для получения информации о пользователях Active Directory, значениях их атрибутов, таких как имена пользователей, email адреса, активность, членство в группах, контактной информации, должностях, организациях и т.д. С помощью командлета Get-ADUser можно вывести информацию о пользователях домена, выполнить запросы (фильтры) для выборки пользователей по критериям, и экспортировать отчеты о пользователях в CSV/TXT файлы для дальнейшего анализа.
Содержание:
- Командлет Get-ADUser в модуле PowerShell Active Directory
- Get-ADUser: поиск пользователя AD и вывод атрибутов
- Фильтрация пользователей AD с помощью Get-ADUser -Filter
- Экспорт списка пользователей AD в текстовый или CSV/Excel файл
- Get-ADUser: часто используемые примеры команд
Ранее для получения информации об учетных записях пользователей 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 - В 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:
help Get-ADUser
Get-ADUser: поиск пользователя AD и вывод атрибутов
Рассмотрим, как с помощью командлета Get-ADUser получить различную информацию о пользователях домена. Командлет может вывести данные как об одном, так и о нескольких пользователях AD.
Использовать командлета Get-ADUser для получения информации из AD можно под любым пользователем домена (не обязательно иметь права администратора или делегированные разрешения). Любой пользователь может просматривать значения. атрибуты объектов AD, кроме защищенных (см. пример с LAPS).
Вывести список всех учетных записей пользователей домена:
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 возвращает только 10 основных свойств пользователя (из более чем 120 атрибутов учетных записей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.
Чтобы вывести значения всех доступных атрибутах пользователя tuser, выполните команду:
Get-ADUser -identity tuser -Properties *
Можно указать выбрать атрибуты, которые нужно выводить. Например, я хочу вывести информацию о том, просрочен ли пароль пользователя (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
Чтобы получить данные из 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
Можно использовать все стандартные логические операторы 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 с точки зрения скорости и производительности предпочтительнее задавать критерии с помощью атрибута 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
Выгрузить адресную книгу 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 -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:\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
Проверить, что пользователь 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.
Командлет Get-ADUser является одним из ключевых инструментов для работы с Active Directory в PowerShell. С его помощью вы сможете быстро находить как отдельных пользователей, так и группы пользователей, просматривать их свойства и при необходимости экспортировать данные в CSV-файл. В этой статье мы подробно рассмотрим, как эффективно использовать Get-ADUser в PowerShell.
Содержание:
- Перед началом работы: что нужно знать
- Как получить информацию о пользователе Active Directory
- Как вывести всех пользователей Active Directory
- Как подсчитать количество пользователей Active Directory
- Получение email-адресов пользователей Active Directory
- Как найти пользователей Active Directory по отделу
- Как узнать дату последнего входа пользователей Active Directory
- Экспорт пользователей Active Directory в CSV-файл
- Как получить пользователей из определенного OU (организационного подразделения)
- Как определить менеджера (руководителя) пользователей Active Directory
- Как найти активных пользователей Active Directory
- Как найти отключенных пользователей Active Directory
- Поиск пользователей с заданным значением свойства Active Directory
- Поиск пользователей без заданного значения свойства Active Directory
- Как найти пользователей Active Directory, чье имя начинается с определенного текста
- Как найти пользователей Active Directory, чей email заканчивается определенным текстом
- Примеры использования Get-ADUser в PowerShell
- Заключение
Перед началом работы: что нужно знать
Перед началом работы с Get-ADUser важно убедиться, что модуль Active Directory установлен. Без него командлет не будет работать, и вы столкнетесь с ошибкой:
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.
At line:1 char:1
+ Get-ADUser
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-ADUser:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Эта ошибка возникает, если модуль Active Directory отсутствует в вашей системе.
Где уже доступны инструменты управления Active Directory?
Контроллер домена
На серверах, где установлена роль Active Directory Domain Services (AD DS), инструменты управления Active Directory устанавливаются автоматически. Это означает, что вы можете сразу использовать Get-ADUser, не выполняя дополнительных настроек.
Рядовой сервер (member server)
Если вы работаете на сервере, который не является контроллером домена, необходимо вручную установить инструменты управления Active Directory с помощью RSAT-ADDS (Remote Server Administration Tools).
Для этого выполните команду в PowerShell с правами администратора:
Install-WindowsFeature -Name RSAT-ADDS
Клиент Windows (например, Windows 11)
На клиентских системах Windows, таких как Windows 10 или 11, нужно установить инструменты удаленного управления Active Directory (RSAT). Сделать это можно с помощью следующей команды:
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Теперь, когда все необходимые компоненты установлены, вы готовы к использованию командлета Get-ADUser для управления учетными записями Active Directory. Дальше мы рассмотрим примеры использования этого мощного инструмента.
Как получить информацию о пользователе Active Directory
Для получения информации о конкретном пользователе в Active Directory необходимо знать уникальный идентификатор, например, SamAccountName или UserPrincipalName. Вот как это можно сделать:
- Получение информации по SamAccountName
SamAccountName — это логин пользователя, который часто используется для аутентификации. Чтобы получить информацию о пользователе, выполните команду:
Get-ADUser -Identity "Amanda.Morgan"
- -Identity указывает конкретного пользователя по его SamAccountName.
- Результат команды содержит основные атрибуты пользователя, такие как имя, логин и SID.
- Получение информации по UserPrincipalName (UPN)
UserPrincipalName — это уникальный адрес пользователя в формате email (например, Amanda.Morgan@exoip.com). Если вы хотите найти пользователя по UPN, используйте фильтр:
Get-ADUser -Filter {UserPrincipalName -eq "Amanda.Morgan@exoip.com"}
- -Filter позволяет задать условие поиска.
- UserPrincipalName -eq «значение»: указывает, что нужно найти пользователя с заданным UPN.
Как вывести всех пользователей Active Directory
- Получение всех пользователей Active Directory
Чтобы вывести всех пользователей, выполните следующую команду:
Get-ADUser -Filter *
- -Filter *: Указывает, что нужно получить всех пользователей без применения фильтров.
- Вывод будет содержать только базовые свойства (например, имя и логин).
- Получение всех пользователей со всеми свойствами
Для отображения всех доступных свойств пользователей используйте параметр -Properties *:
Get-ADUser -Filter * -Properties *
- Команда вернет весь набор данных о пользователях, включая такие свойства, как email, телефон, отдел, дата последнего входа и др.
- Получение всех пользователей с выбором конкретных свойств
Если вам нужны только определенные свойства, например, имя и UPN (UserPrincipalName), используйте Select-Object:
Get-ADUser -Filter * | Select-Object Name, UserPrincipalName
- Select-Object Name, UserPrincipalName: Выводит только указанные свойства для всех пользователей.
Пример вывода:
Name UserPrincipalName
---- -----------------
Amanda Morgan Amanda.Morgan@exoip.com
John Smith John.Smith@exoip.com
- Сортировка списка пользователей по имени
Чтобы отсортировать результат по имени, добавьте Sort-Object:
Get-ADUser -Filter * | Select-Object Name, UserPrincipalName | Sort-Object Name
- Sort-Object Name: Сортирует пользователей в алфавитном порядке по имени.
Пример вывода:
Name UserPrincipalName
---- -----------------
Amanda Morgan Amanda.Morgan@exoip.com
John Smith John.Smith@exoip.com
Zoe Brown Zoe.Brown@exoip.com
Как подсчитать количество пользователей Active Directory
Для подсчета общего количества пользователей Active Directory можно использовать комбинацию команд Get-ADUser и Measure-Object.
(Get-ADUser -Filter * | Measure-Object).Count
Get-ADUser -Filter *
- Извлекает всех пользователей Active Directory.
- -Filter * указывает, что фильтр не применяется, и возвращаются все записи.
| Measure-Object
- Подсчитывает количество объектов, переданных через конвейер (в данном случае — пользователей).
.Count
- Возвращает числовое значение, которое является итоговым количеством объектов (пользователей).
Если в Active Directory содержится, например, 250 пользователей, команда вернет:
250
Альтернативный вариант с выборкой:
Если вам нужно подсчитать количество пользователей с определенными критериями (например, только активные пользователи), можно добавить фильтр. Например:
- Подсчет активных пользователей:
(Get-ADUser -Filter {Enabled -eq $true} | Measure-Object).Count
- Подсчет пользователей из определенного OU:
(Get-ADUser -Filter * -SearchBase "OU=Sales,DC=exoip,DC=local" | Measure-Object).Count
Получение email-адресов пользователей Active Directory
Для получения списка пользователей Active Directory и их основных адресов электронной почты (SMTP) можно использовать командлет Get-ADUser с выбором необходимых свойств.
Get-ADUser -Filter * -Properties EmailAddress | Select-Object Name, EmailAddress
-Properties EmailAddress
- Добавляет в результат свойство EmailAddress, которое по умолчанию не отображается.
| Select-Object Name, EmailAddress
- Выбирает только два свойства для вывода:
- Name: Имя пользователя.
- EmailAddress: Основной адрес электронной почты пользователя.
Команда выведет список пользователей и их адреса электронной почты. Пример вывода:
Name EmailAddress
---- ------------
Amanda Morgan amanda.morgan@exoip.com
John Smith john.smith@exoip.com
Zoe Brown zoe.brown@exoip.com
- Получение email пользователей из определенного OU:
Если нужно получить email-адреса пользователей из конкретного организационного подразделения (OU), используйте параметр -SearchBase:
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=exoip,DC=local" -Properties EmailAddress | Select-Object Name, EmailAddress
- Сортировка по имени:
Если требуется отсортировать список по имени, добавьте Sort-Object:
Get-ADUser -Filter * -Properties EmailAddress | Select-Object Name, EmailAddress | Sort-Object Name
Как найти пользователей Active Directory по отделу
Чтобы вывести пользователей Active Directory с информацией об их отделах и дополнительными свойствами, такими как основной адрес электронной почты, можно использовать Get-ADUser. Это особенно полезно для администрирования и формирования отчетов.
Get-ADUser -Filter * -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department
-Properties EmailAddress, Department
- Добавляет к результату свойства EmailAddress (адрес электронной почты) и Department (отдел). Эти свойства не отображаются по умолчанию.
| Select-Object Name, EmailAddress, Department
- Оставляет только выбранные свойства для вывода:
- Name: Имя пользователя.
- EmailAddress: Основной адрес электронной почты.
- Department: Название отдела.
Команда выведет список пользователей с их именами, email-адресами и отделами. Пример вывода:
Name EmailAddress Department
---- ------------ ----------
Amanda Morgan amanda.morgan@exoip.com IT Department
John Smith john.smith@exoip.com Sales
Zoe Brown zoe.brown@exoip.com Marketing
- Получение пользователей конкретного отдела
Если необходимо получить пользователей только из определенного отдела, добавьте фильтр по свойству Department:
Get-ADUser -Filter {Department -eq "Sales"} -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department
Пример вывода:
Name EmailAddress Department
---- ------------ ----------
John Smith john.smith@exoip.com Sales
- Сортировка по отделу
Для сортировки пользователей по отделу можно использовать Sort-Object:
Get-ADUser -Filter * -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department | Sort-Object Department
Как узнать дату последнего входа пользователей Active Directory
Для управления учетными записями Active Directory может потребоваться информация о дате последнего входа пользователей. Вот как это можно сделать с помощью командлета Get-ADUser.
- Получение даты последнего входа всех пользователей
Чтобы вывести список всех пользователей Active Directory с их датами последнего входа, используйте следующую команду:
Get-ADUser -Filter * -Properties LastLogonDate | Sort-Object -Property LastLogonDate -Descending | Select-Object Name, LastLogonDate
-Properties LastLogonDate
- Добавляет свойство LastLogonDate, которое показывает дату последнего входа.
Sort-Object -Property LastLogonDate -Descending
- Сортирует список в порядке убывания даты (сначала самые недавние входы).
Select-Object Name, LastLogonDate
- Выводит только имя пользователя и дату последнего входа.
Name LastLogonDate
---- -------------
John Smith 01/15/2025 14:32:10
Amanda Morgan 01/10/2025 08:45:23
Zoe Brown 12/28/2024 11:22:17
- Получение пользователей, входивших за последние 90 дней
Если нужно вывести только тех пользователей, которые заходили в систему в последние 90 дней, используйте следующую команду:
$90days = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -gt $90days} -Properties LastLogonDate | Select-Object Name, UserPrincipalName, LastLogonDate
$90days = (Get-Date).AddDays(-90)
- Создает переменную, содержащую дату, соответствующую 90 дням назад от текущей даты.
-Filter {LastLogonDate -gt $90days}
- Фильтрует пользователей, у которых дата последнего входа больше (новее) этой даты.
Select-Object Name, UserPrincipalName, LastLogonDate
- Выводит имя, UPN и дату последнего входа.
Name UserPrincipalName LastLogonDate
---- ---------------- -------------
John Smith john.smith@exoip.com 01/15/2025 14:32:10
Amanda Morgan amanda.morgan@exoip.com 01/10/2025 08:45:23
- Оптимизация для больших доменов
Если в вашей Active Directory большое количество пользователей, используйте -ResultSize для ограничения результата:
Get-ADUser -Filter * -Properties LastLogonDate -ResultSize 1000 | Sort-Object -Property LastLogonDate -Descending | Select-Object Name, LastLogonDate
Экспорт пользователей Active Directory в CSV-файл
Экспорт данных о пользователях Active Directory в формат CSV позволяет создавать отчеты и легко передавать данные в другие системы. Вот как это сделать с помощью Get-ADUser.
- Экспорт всех пользователей в файл CSV
Чтобы экспортировать всех пользователей с их основными свойствами, выполните следующую команду:
Get-ADUser -Filter * -Properties * | Select-Object Name, SamAccountName, EmailAddress, Department | Export-CSV -Path "C:\temp\ADUsers.csv" -NoTypeInformation -Encoding UTF8
Select-Object Name, SamAccountName, EmailAddress, Department
- Выбирает только нужные свойства для экспорта:
- Name: Имя пользователя.
- SamAccountName: Учетная запись пользователя.
- EmailAddress: Основной email-адрес.
- Department: Название отдела.
Export-CSV -Path «C:\temp\ADUsers.csv»
- Экспортирует данные в файл ADUsers.csv в указанной директории.
-NoTypeInformation
- Убирает системную информацию о типах данных из CSV.
-Encoding UTF8
- Указывает кодировку файла для корректного отображения данных.
- Экспорт пользователей из определенного OU
Если нужно экспортировать пользователей только из определенного организационного подразделения (OU), используйте параметр -SearchBase:
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=exoip,DC=local" -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department | Export-CSV -Path "C:\temp\SalesUsers.csv" -NoTypeInformation -Encoding UTF8
-SearchBase
- Ограничивает поиск только указанным OU (в данном случае Sales).
- Экспорт активных пользователей
Для экспорта только активных пользователей (свойство Enabled = True) используйте фильтр:
Get-ADUser -Filter {Enabled -eq $true} -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department | Export-CSV -Path "C:\temp\ActiveUsers.csv" -NoTypeInformation -Encoding UTF8
Пример содержимого CSV-файла
После выполнения команды, файл ADUsers.csv будет содержать следующие данные:
Name,SamAccountName,EmailAddress,Department
Amanda Morgan,amorgan,amanda.morgan@exoip.com,IT
John Smith,jsmith,john.smith@exoip.com,Sales
Zoe Brown,zbrown,zoe.brown@exoip.com,Marketing
Как получить пользователей из определенного OU (организационного подразделения)
Работа с пользователями Active Directory в определенных организационных единицах (OU) позволяет ограничить область поиска и анализировать только нужные данные.
Рассмотрим несколько примеров.
Для вывода всех пользователей из конкретного OU используйте следующую команду:
Get-ADUser -Filter * -SearchBase "OU=Users,OU=Company,DC=exoip,DC=local" | Select-Object Name, UserPrincipalName
-SearchBase
- Указывает путь к OU, в котором нужно искать пользователей. В данном примере — это OU=Users,OU=Company,DC=exoip,DC=local.
Пример результата:
Name UserPrincipalName
---- -----------------
Amanda Morgan amanda.morgan@exoip.com
John Smith john.smith@exoip.com
Zoe Brown zoe.brown@exoip.com
- Отфильтровать пользователей из отдела внутри OU
Если вам нужно вывести пользователей только из конкретного отдела, добавьте фильтр по свойству Department:
Get-ADUser -Filter {Department -eq "Sales"} -SearchBase "OU=Users,OU=Company,DC=exoip,DC=local" -Properties EmailAddress | Select-Object Name, UserPrincipalName, EmailAddress
-Filter {Department -eq «Sales»}
- Фильтрует пользователей, принадлежащих отделу Sales.
Name UserPrincipalName EmailAddress
---- ---------------- ------------
John Smith john.smith@exoip.com john.smith@exoip.com
- Поиск только в указанном OU (без подподразделений)
По умолчанию команда Get-ADUser ищет пользователей во всех уровнях указанного OU, включая подподразделения. Чтобы ограничить поиск только указанным OU, используйте параметр -SearchScope со значением OneLevel:
Get-ADUser -Filter * -SearchBase "OU=Users,OU=Company,DC=exoip,DC=local" -SearchScope OneLevel | Select-Object Name, UserPrincipalName
-SearchScope OneLevel
- Ограничивает поиск только на указанном уровне OU.
Как определить менеджера (руководителя) пользователей Active Directory
Менеджер (руководитель) пользователя Active Directory хранится в поле Manager. Используя Get-ADUser, можно получить как менеджера для конкретного пользователя, так и для всех пользователей. Рассмотрим несколько примеров.
- Получить менеджера для одного пользователя
Чтобы узнать, кто является менеджером конкретного пользователя, выполните следующую команду:
Get-ADUser -Identity "Amanda.Morgan" -Properties Manager | Select-Object Name, @{Name='Manager';Expression={(Get-ADUser $_.Manager).Name}}
-Identity «Amanda.Morgan»
- Указывает имя пользователя (SamAccountName или UserPrincipalName), для которого нужно получить информацию.
-Properties Manager
- Добавляет свойство Manager в вывод.
@{Name=’Manager’;Expression={(Get-ADUser $_.Manager).Name}}
- Получает имя менеджера, используя значение свойства Manager.
- Get-ADUser $_.Manager выполняет дополнительный запрос для получения данных о менеджере.
Пример результата:
Name Manager
---- -------
Amanda Morgan John Smith
- Получить менеджеров для всех пользователей
Если необходимо вывести список всех пользователей вместе с их менеджерами, используйте следующую команду:
Get-ADUser -Filter * -Properties Manager | Select-Object Name, @{Name='Manager';Expression={(Get-ADUser $_.Manager -ErrorAction SilentlyContinue).Name}}
-ErrorAction SilentlyContinue
- Скрывает ошибки, если у пользователя не задан менеджер (например, поле Manager пустое).
Select-Object
- Формирует вывод с именами пользователей и их менеджеров.
Name Manager
---- -------
Amanda Morgan John Smith
Zoe Brown Sarah Taylor
John Doe (отсутствует)
- Фильтрация пользователей по менеджеру
Чтобы вывести только пользователей, у которых менеджером является определенный человек, используйте фильтр:
Get-ADUser -Filter {Manager -eq "CN=John Smith,OU=Users,DC=exoip,DC=local"} | Select-Object Name, UserPrincipalName
- Экспорт пользователей и их менеджеров в CSV
Для создания отчета с данными о менеджерах пользователей можно экспортировать результат в файл CSV:
Get-ADUser -Filter * -Properties Manager | Select-Object Name, @{Name='Manager';Expression={(Get-ADUser $_.Manager -ErrorAction SilentlyContinue).Name}} | Export-CSV -Path "C:\temp\ADUsersManagers.csv" -NoTypeInformation -Encoding UTF8
Как найти активных пользователей Active Directory
Чтобы получить список всех активных (включенных) пользователей в Active Directory, можно использовать фильтр Enabled -eq $true. Это позволяет отобразить только те учетные записи, которые не отключены.
Get-ADUser -Filter {Enabled -eq $true} | Select-Object Name, UserPrincipalName | Sort-Object Name
Get-ADUser -Filter {Enabled -eq $true}
- Фильтрует учетные записи пользователей, у которых свойство Enabled равно true (активные пользователи).
| Select-Object Name, UserPrincipalName
- Отбирает для вывода только имя пользователя (Name) и его UserPrincipalName (UPN), что часто используется для входа.
| Sort-Object Name
- Сортирует список пользователей в алфавитном порядке по имени.
Пример вывода:
Name UserPrincipalName
---- -----------------
Amanda Morgan amanda.morgan@exoip.com
John Smith john.smith@exoip.com
Zoe Brown zoe.brown@exoip.com
- Получить активных пользователей с дополнительными свойствами:
Чтобы включить в результат дополнительные данные, такие как email или отдел, добавьте их через параметр -Properties:
Get-ADUser -Filter {Enabled -eq $true} -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department | Sort-Object Name
- Экспорт в CSV:
Для создания отчета с активными пользователями можно экспортировать результат в файл CSV:
Get-ADUser -Filter {Enabled -eq $true} | Select-Object Name, UserPrincipalName | Export-CSV -Path "C:\temp\ActiveADUsers.csv" -NoTypeInformation -Encoding UTF8
Как найти отключенных пользователей Active Directory
Для получения списка всех отключенных учетных записей пользователей в Active Directory можно использовать фильтр Enabled -eq $false. Эта команда позволяет быстро выявить неактивных пользователей для управления или анализа.
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, UserPrincipalName | Sort-Object Name
- Получить отключенных пользователей с дополнительными свойствами:
Если требуется получить больше информации об отключенных пользователях, например, email-адрес или отдел, добавьте их через параметр -Properties:
Get-ADUser -Filter {Enabled -eq $false} -Properties EmailAddress, Department | Select-Object Name, EmailAddress, Department | Sort-Object Name
- Экспорт в CSV:
Чтобы сохранить результат в CSV-файл для последующего анализа, используйте следующую команду:
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, UserPrincipalName | Export-CSV -Path "C:\temp\DisabledADUsers.csv" -NoTypeInformation -Encoding UTF8
- Фильтрация по OU:
Если нужно получить отключенных пользователей из конкретного организационного подразделения (OU), добавьте параметр -SearchBase:
Get-ADUser -Filter {Enabled -eq $false} -SearchBase "OU=Users,OU=Company,DC=exoip,DC=local" | Select-Object Name, UserPrincipalName
Поиск пользователей с заданным значением свойства Active Directory
Если нужно найти пользователей Active Directory, у которых установлено определенное свойство (например, номер мобильного телефона), можно использовать Get-ADUser с фильтром. Ниже приведен пример команды для получения пользователей с настроенным номером мобильного телефона.
Get-ADUser -Filter {MobilePhone -like "*"} -Properties MobilePhone | Select-Object Name, MobilePhone
-Filter {MobilePhone -like «*»}
- Фильтрует пользователей, у которых свойство MobilePhone не пустое (т.е. оно задано).
- -like «*» означает, что значение свойства может быть любым, но оно должно существовать.
-Properties MobilePhone
- Загружает свойство MobilePhone, так как оно не входит в список стандартных свойств, отображаемых по умолчанию.
| Select-Object Name, MobilePhone
- Выводит только имя пользователя (Name) и его номер мобильного телефона (MobilePhone).
Пример вывода:
Name MobilePhone
---- -----------
Amanda Morgan +1-555-123-4567
John Smith +1-555-987-6543
Zoe Brown +1-555-555-5555
- Получить пользователей с другим заданным свойством:
Если нужно найти пользователей с настроенным другим свойством, например, Title (должность), измените фильтр следующим образом:
Get-ADUser -Filter {Title -like "*"} -Properties Title | Select-Object Name, Title
Поиск пользователей без заданного значения свойства Active Directory
Чтобы найти пользователей Active Directory, у которых номер мобильного телефона не указан, можно использовать Get-ADUser с фильтром -notlike «. Вот пример команды:
Get-ADUser -Filter {MobilePhone -notlike "*"} -Properties MobilePhone | Select-Object Name, MobilePhone
-Filter {MobilePhone -notlike «*»}
- Фильтрует пользователей, у которых свойство MobilePhone пустое (не задано).
- -notlike «*» означает, что свойство либо отсутствует, либо не имеет значения.
-Properties MobilePhone
- Добавляет свойство MobilePhone в результат (по умолчанию оно не отображается).
| Select-Object Name, MobilePhone
- Отбирает только имя пользователя (Name) и свойство MobilePhone (которое в этом случае будет пустым).
Пример вывода:
Name MobilePhone
---- -----------
John Doe
Jane Doe
Test User
Как найти пользователей Active Directory, чье имя начинается с определенного текста
Для поиска пользователей, чьи имена начинаются с конкретного текста, например, «Аманда», можно использовать Get-ADUser с фильтром -like.
Get-ADUser -Filter "Name -like 'Amanda*'" | Select-Object Name, UserPrincipalName
-Filter «Name -like ‘Amanda*'»
- Фильтрует пользователей, чьи имена начинаются с «Amanda».
- -like ‘Amanda*’: Звездочка (*) означает, что после «Amanda» может быть любое количество символов.
Пример вывода:
Name UserPrincipalName
---- -----------------
Amanda Morgan amanda.morgan@exoip.com
Amanda Taylor amanda.taylor@exoip.com
- Поиск с учетом регистра:
Active Directory не чувствителен к регистру, поэтому Amanda, AMANDA или amanda дадут одинаковый результат.
Как найти пользователей Active Directory, чей email заканчивается определенным текстом
Эти команды позволяют извлечь пользователей, чей почтовый адрес заканчивается на указанный домен, а также сортировать их по имени. Рассмотрим два сценария: поиск по одному домену и по нескольким доменам.
- Получить пользователей, чей email заканчивается на один домен
Для извлечения всех пользователей, чей email заканчивается на домен @exoip.com, выполните следующую команду:
Get-ADUser -Filter "EmailAddress -like '*@exoip.com'" -Properties EmailAddress | Select-Object Name, EmailAddress | Sort-Object Name
-Filter «EmailAddress -like ‘*@exoip.com'»
- Фильтрует пользователей, чей адрес электронной почты заканчивается на @exoip.com.
-Properties EmailAddress
- Загружает свойство EmailAddress (по умолчанию оно не отображается).
| Select-Object Name, EmailAddress
- Отбирает только имя пользователя (Name) и его адрес электронной почты (EmailAddress).
| Sort-Object Name
- Сортирует пользователей в алфавитном порядке по имени.
Пример результата:
Name EmailAddress
---- ------------
Amanda Morgan amanda.morgan@exoip.com
John Smith john.smith@exoip.com
Zoe Brown zoe.brown@exoip.com
- Найти пользователей с email, заканчивающимся на несколько доменов
Если нужно найти пользователей с адресами электронной почты, заканчивающимися на @exoip.com или @o365info.com, используйте следующий фильтр:
Get-ADUser -Filter {(EmailAddress -like '*@exoip.com') -or (EmailAddress -like '*@o365info.com')} -Properties EmailAddress | Select-Object Name, EmailAddress | Sort-Object Name
-Filter {(EmailAddress -like ‘*@exoip.com’) -or (EmailAddress -like ‘*@o365info.com’)}
- Фильтрует пользователей с адресами, заканчивающимися либо на @exoip.com, либо на @o365info.com.
Пример результата:
Name EmailAddress
---- ------------
Amanda Morgan amanda.morgan@exoip.com
John Smith john.smith@o365info.com
Zoe Brown zoe.brown@exoip.com
Примеры использования Get-ADUser в PowerShell
Лучший способ понять, как использовать командлет Get-ADUser в PowerShell-скриптах, — это изучить примеры готовых скриптов. Они помогут увидеть практическое применение и научат эффективно использовать эту команду для работы с данными Active Directory.
- Как импортировать пользователей AD из CSV с помощью PowerShell
- Как экспортировать пользователей AD в CSV с помощью PowerShell
Заключение
Вы узнали, как эффективно использовать Get-ADUser в PowerShell. Этот мощный командлет позволяет извлекать данные о пользователях и фильтровать их в соответствии с вашими требованиями в среде Active Directory. Используя различные параметры и фильтры, вы можете создавать подробные отчеты, содержащие именно те свойства пользователей, которые вам нужны, и легко экспортировать их для дальнейшего анализа или администрирования.
Вам понравилась эта статья? Тогда вам, скорее всего, будет интересна другая полезная статья Как проверить работоспособности Active Directory с помощью скрипта PowerShell.
Интересуешься IT и системным администрированием? Подпишись на SysAdminHub в телеграмм, чтобы узнавать обо всем первым — t.me/SysAdminHub
Статья была полезна? Поддержи автора, и благодаря твоей помощи новые материалы будут выходить еще чаще:
The Get-ADUser is the most commonly used PowerShell cmdlet for retrieving Active Directory user information, including attributes like usernames, email addresses, account activity, group memberships, contact details, job titles, organizational data, etc. Using the Get-ADUser cmdlet, you can get the value of any attribute of an AD user account, list domain users, export user reports to CSV/TXT files, and use various criteria to select and filter domain users.
Contents:
- Get-ADUser Cmdlet in the Active Directory PowerShell Module
- How to Find AD User and List Properties with Get-ADUser
- Get-ADUser -Filter Examples
- Exporting Active Directory Users to CSV/TXT Files with PowerShell
- Get-ADUser Usage Examples
Previously, AD user account information was retrieved using the ADUC graphical console (including saved AD queries), VBScript, the dsquery tool, and other tools. All of these tools can be easily replaced with the Get-ADUser cmdlet.
Get-ADUser Cmdlet in the Active Directory PowerShell Module
To use the Get-ADUsercmdlet to get information from AD, you must have the Active Directory module for PowerShell installed on the computer.
This module is installed on AD domain controllers along with the Active Directory Domain Services (AD DS) role. The AD module can also be installed manually on any computer (it is part of the RSAT package):
- Windows Server 2012 R2 and newer:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature - Windows 11 and 10:
Get-WindowsCapability -Name RSAT.ActiveDirectory* -Online | Add-WindowsCapability -Online
Check that the module is installed, and if necessary, import it into your PowerShell session:
Get-Module ActiveDirectory
Import-Module ActiveDirectory
If RSAT-AD-PowerShell is not installed, you get an error when running the Get-ADUser command:
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.
There is also a way to use the AD-PowerShell module without installing RSAT. Simply copy the main module files to a computer and import the module into the PowerShell session:
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.resources.dll"
View the complete syntax and list of available arguments for the Get-ADUser cmdlet:
help Get-ADUser
How to Find AD User and List Properties with Get-ADUser
Let’s look at how to use the Get-ADUser cmdlet to find different information about domain users. The cmdlet can retrieve information for a single AD user or multiple users.
Any non-admin domain user can use the Get-ADUser cmdlet to get information from AD (the domain admin or similar delegated AD permissions are not required). Any user can view the values of AD object attributes, except for protected attributes (see the example in the post Local Administrator Password Solution, LAPS).
To display the list of all domain user accounts:
Get-ADUser -filter *
Important. It is not recommended to run this command against the Active Directory domains with a large number of user accounts. This can place a heavy load on the domain controller providing the AD information.
To get the properties of a specific user, use the –Identity parameter. Identity can be a username, login (SAMAccountName), DN (Distinguished Name), SID, or GUID.
The following PowerShell commands will return the same result for the same AD user account:
Get-ADUser –Identity b.smith
Get-ADUser –Identity "CN=Brian Smith,OU=Users,OU=Berlin,DC=woshub,DC=loc"
Get-ADUser –Identity "Brian Smith"
By default, the Get-ADUser cmdlet returns only 10 basic user attributes (out of more than 120 user account properties): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, account status (Enabled: True/False according to the UserAccountControl AD attribute), etc.
Lists the values of all available attributes for the specified user.
Get-ADUser -identity b.smith -properties *
The Get-ADUser cmdlet with the Properties * switch lists all the attributes of the AD user and their values (including empty ones). A similar list of user attributes is available in the Active Directory Users and Computers graphical snap-in (dsa.msc) under the Attribute Editor tab.
Then we’ll go to the formatting of Get-ADUser output so that the necessary user attributes are displayed. For example, you want to display the values of the following user properties:
For example, I want to display information about whether a user’s password has expired (Expired: True/False), the last time the password was changed, when the user password expires, and the last time the user logged into the domain. This info is stored in the following user account attributes:
- PasswordExpired
- PasswordLastSet
- PasswordNeverExpires
- LastLogonTimestamp
Run the command:
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp
To display only the specific user attributes in the output (remove all unnecessary attributes), filter them using Select-Object -Property or Format-Table. The following command displays the password status for all AD users in a convenient table view:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | Format-Table Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
To get AD user info from a specific domain controller, use the -Server switch:
Get-ADUser –Server DC01.woshub.com –Identity tstuser
To retrieve user data from another Active Directory domain, specify the DC name and use the -Credential parameter to provide the access credentials:
$ADcred = Get-Credential
Get-ADUSer tstuser -Server DC01.contoso.com -Credential $ADcred
Get-ADUser -Filter Examples
The Get-ADUser -Filter parameter allows to filter the list of users by one or more attributes. This helps in finding Active Directory users whose attributes match specific criteria.
For example, I want to list active (Enabled) user accounts whose name contains “Dmitry”. To do this, a filter with multiple conditions is used. User attributes must meet both filter conditions in this example (-and).
Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled
To select values for user attributes, you can use all of the standard PowerShell logical comparison operators (-eq, -ne, -gt, -ge, -lt, -le, -like, -notlike, -and, -or, etc.)
You can use the Sort-Object cmdlet to sort the result list by a specific user property (attribute). In addition, you can use the Where-Object cmdlet to specify multiple filter criteria at once.
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=NY,DC=woshub,DC=com'| where {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Hint. When looking up Active Directory users using the Get-ADUser command, specifying the criteria by using the Filter attribute is better for performance than using the pipeline to the Where-Object cmdlet. In this case, the results of the selection are filtered at the domain controller, and a smaller set of data is sent back to your computer over the network.
You can use LDAP filters in Get-ADUser queries. An LDAP filter can be specified by using the -LdapFilter attribute.
Get-ADUser -LDAPFilter '(&(department=it)(title=sysops))'
Exporting Active Directory Users to CSV/TXT Files with PowerShell
The Get-ADUser command can be used to output a list of domain users and their properties to a text file:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt
Or, use the Export-CSV cmdlet to export users to a CSV file, that you can then easily open in Excel.
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like "*Dmitry*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8
Export a company email address list from AD to a CSV file. Later, you can import this CSV address list into desktop email clients (such as Outlook or 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\adress_list.csv
Get-ADUser Usage Examples
Let’s show several useful PowerShell command examples for querying Active Directory users with various filters. Combine them to get the list of AD user objects you need:
Display AD users, whose names begin with Joe:
Get-ADUser -filter {name -like "Joe*"}
Count the total number of user accounts in the Active Directory:
Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object
List disabled Active Directory users:
Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table
List AD user email addresses:
Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=woshub,DC=com'| select-object Name, EmailAddress
List enabled users and their email addresses:
Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table
Find the users who don’t have an Email address set:
Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null
Get active users who don’t have a Department specified in their properties:
Get-AdUser -Filter "Enabled -eq 'True'" -Properties * |where Department -eq $null|select name,enabled, Department
Get the creation date of the Active Directory user account:
Get-ADuser -Filter * -Properties Name, WhenCreated | Select name, whenCreated
List users created in the last 24 hours:
$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}
List the accounts with expired passwords (password expiration options are set in the domain password policy):
Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired| where {$_.PasswordExpired}|select name,passwordexpired
Users who haven’t changed their domain passwords in the last 90 days:
$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}
Find inactive user accounts (not logged into the domain for more than 180 days). The LastLogonTimestamp attribute value is used to get the logon history of a domain user.
$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
To get a user’s photo from Active Directory and save it to a JPG file:
$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte
To get a list of users only from a specific domain container (Organizational Unit), use the -SearchBase parameter:
Get-ADUser -SearchBase 'OU=London,DC=woshub,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Select users from multiple OUs at once using the following PowerShell commands:
$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}
List the AD groups that the user account is a member of:
Get-AdUser sjoe -Properties memberof | Select memberof -expandproperty memberof
List the users from the OU that are members of a specific domain security group:
Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}
List users from the OU who are members of a specific domain security group:
Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}
The Get-ADUser and Add-ADGroupMember cmdlets can be used to create dynamic AD user groups (depending on city, job title, department, etc.).
Task: get the user’s company name from AD and save it to a CSV file for a list of user accounts in a text file (one account per line). You can then import this CSV file into Excel:
Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}
List users from the OU, except for members of a specific group:
$Users = Get-ADUser -filter * -SearchBase ‘OU=Berlin,DC=woshub,DC=com’ -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}
Export a list of AD users with the Organizational Unit names (where they are located) to the Out-GridView table:
get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView
Check that the AD user account exists:
$SamAccountName='jbrown'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{ Write-Host "User $SamAccountName doesn’t exist"}
List the domain computers the user is allowed to log on (logon restriction through the LogonWorkstations AD attribute).
Get-ADUser jbrown -Properties LogonWorkstations | Format-List Name, LogonWorkstations
Tip. The Get-ADComputercmdlet is used to get the properties of a computer or to search for multiple computers in Active Directory.
Introduction
The Get-ADUser cmdlet in PowerShell provides many parameters for finding one or more users in an Active Directory (AD) domain.
By default, PowerShell runs using the account that is logged on to the machine. If you want to run a command using a different account, you can force PowerShell to prompt you for the credentials by using this switch before your command:
$cred =Get-Credential
Searching for a Specific User
-Identity Parameter
Use the -Identity parameter if you know which AD user you want to get:
Get-ADUser -Identity “identifier”
Specify one of the following for the identifier:
- DistinguishedName (DN)
- SamAccountName
- GUID
- SID
Example
Get-ADUser -Identity "ABBEY.Crawford"
Limiting a Search to a Particular OU
-SearchBase Parameter
Use the -SearchBase parameter to limit the search to a specific OU, specified by its distinguished name (DN):
Get-ADUser -Filter "givenname -Like 'Abbey'" -SearchBase "distinguishedName of OU"
Example
Get-ADUser -Filter "givenname -Like 'Abbey'" -SearchBase "OU=Versacorp,DC=milkyway,DC=local"
-SearchScope Parameter
Combine the SearchBase and SearchScope parameters to limit the search to a particular OU and a specified number of levels of sub-OUs. For example, to find user accounts in an OU and its immediate child OUs, specify a value of 1 for SearchScope. To include both child and grandchild OUs, use a value of 2.
Get-ADUser -SearchBase " distinguishedName of OU " -SearchScope "2"
Example
Get-ADUser -Filter "givenname -Like 'Abbey'" -SearchBase "OU=Versacorp,DC=milkyway,DC=local" -SearchScope "2"
Filtering for Specific Sets of Users
-Filter Parameter
If you don’t know the exact value of any identifier, you can specify a property to filter on and a value for the filter, as follows:
Get-ADUser -Filter “filter value”
Operators
| Operator | Meaning | Sample expression |
| -eq | Equal to | Name -like ‘Inga’ |
| -ne | Not equal to | Country -ne ‘US’ |
| -gt | Greater than | BadLogonCount -gt ‘0’ |
| -ge | Greater than or equal | Modified -ge ’06-04-2021 12:00:00? |
| -lt | Less than | LastLogonTimeStamp -lt ’01-08-2020? |
| -le | Less than or equal | Created -le ’01-08-2020? |
| -like | Wildcard search | Mail -like ‘*@xyz.com’ |
| -notlike | Wildcard search with negation | Department -notlike ‘*’ |
| -and | And | Country -eq ‘US’ -and Department -eq ‘Operations’ |
| -or | Or | Country -eq ‘US’ -or -Country -eq ‘UK’ |
Finding Users with a Certain Given Name
To search for a user with his or her first name or part of the name, use the -Filter parameter with the -like clause and a value.
The following example shows the use of the Filter parameter, that involves the AD attribute, givenName. It returns users whose givenName contains Abbey.
Get-ADUser -Filter “givenname -Like ‘Abbey’”
Finding Users with Similar Names
You can modify the previous command using the wildcard operator to get all users whose name starts with a particular string, as follows:
Get-ADUser -Filter "Name -like 'Abb*'" | Select Name,givenname,surname,samAccountName,distinguishedname | ftG
Finding All Enabled Users
If you want to see all enabled users, you can use this cmdlet:
Get-ADUser -filter {Enabled -eq "true"} | ft
Finding Disabled Users
Finding disabled users can be quite valuable to facilitate AD cleanup. Using a simple command with one filter, “-Filter “Enabled -eq ‘false’”” could return hundreds of disabled users, as some companies prefer to keep their Active Directory objects for auditing purposes. Use the -SearchBase filter with a specific OU to limit results. For example, this cmdlet will find all disabled user accounts in a particular OU:
Get-ADUser -Filter “Enabled -eq 'false'” -SearchBase "CN=Users,DC=Knox,DC=lab" -Properties * | Select Name,Enabled |ft
Finding Users Who Have Email Addresses
To find all users who have mailboxes assigned to them, use the following command:
Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding Accounts with Password Expiry Not Set
To strengthen security, you might want to find all accounts whose ‘passwordneverexpires’ attribute is set to true, as follows:
Get-ADUser -Filter {passwordneverexpires -eq "true"} | Select Name, sAMAccountName
Finding Stale User Accounts
At times, we need to filter out the user accounts that have not been in use for some time. Here is how to find all user accounts that have not been used during the last 60 days:
$CutoffDate = (Get-Date).AddDays(-60)
Get-ADUser -Filter "LastLogonDate -lt '$CutoffDate'" -Properties LastLogonDate | Select Name, LastLogonDate
Finding Users Created on a Particular Date
To see all user accounts created on a particular date in Active Directory, you can use this command:
Get-ADUser -Filter {Created -lt '7/30/2021'} | Select Name
Combining Multiple Filters
You can combine multiple filters to define complex criteria for finding users.
Example 1
The following command will return all enabled users from the Sales department:
Get-ADUser -Filter "Enabled -eq 'true' -and Department -like 'Sales'" -Properties * | Select Name, Department |ft
Example 2
The following cmdlet will return all users whose department attribute is not null and whose name begins with the letter A:
Get-ADUser -filter {Department -ne "null"} | Where-Object Name -like 'A*'
Controlling Which Properties Are Displayed
-Properties Parameter
By default, the Get-ADUser command returns only a handful of parameters. If you want the extended list of properties of a user, use this cmdlet:
Get-ADUser -Identity “Identifier” -Properties *
Displaying a Specific Set of Properties
Alternatively, you can explicitly list the properties you want to see for a user:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,Enabled,mail,department,company,title,c,st,streetaddress |ft
Displaying Group Membership
To see the membership of a user, use this cmdlet:
Get-ADUser -Identity Abbey.crawford -Properties memberof | Select-Object -ExpandProperty memberof
Displaying Email Address
If you want to see a specific user’s email address, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,mail |ft
Displaying User Principal Name (UPN)
To retrieve a user’s UPN, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,userprincipalname |ft
Displaying SAM Account Name
To display a user’s SAM account name, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,samAccountName |ft
Displaying Display Name
If you want to see the display name of a user (for example, since it might be different in ADUC), you can use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,displayname |ft
Displaying Distinguished Name
To see the distinguished name of a user, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,distinguishedname |ft
Displaying Proxy Addresses
If you want to see the proxy addresses of a user, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,proxyaddresses |ft
Displaying a User’s Manager
To show the SAM account name of a user’s manager, use this command:
Get-ADUser “User Identifier” -properties * | select amAccountName, @{Name=’Manager’;Expression={(Get-ADUser($_.manager)).samaccountname}}
Displaying Employee ID
To see the employee ID of a user, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,employeeid |ft
Displaying Telephone Numbers
To find all phone numbers of a user, use this command:
Get-ADUser -Identity “User Identifier” -Properties * | Select *Phone*
To display these values in the form of a table, use this command:
Get-ADUser -Identity “User Identifier” -Properties * | Select Name, *Phone* | ft
Displaying Password Expiry Date and Time
To see the password expiry date for an account, use this cmdlet:
Get-ADUser -Identity “User Identifier” -Properties msDS-UserPasswordExpiryTimeComputed | select Name, {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
Displaying Account Creation Date
To see when a user account was created in AD, use this command:
Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Displaying Last Logon Date and Time
If you want to see the last time a user logged on to any system, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -Properties * | Select Name,lastlogondate |ft
Displaying Last Password Change Date and Time
To see when a user last changed their password, use this cmdlet:
Get-ADUser -Identity Abbey.Crawford -properties PwdLastSet,PasswordLastSet | sort Name | ft Name,PwdLastSet,PasswordLastSet
Displaying the Values of Extension Attributes
Organizations can use AD extension attributes to store additional information about users. For example, O365 license information can be stored in ExtensionAttribute1. To see this information, use this cmdlet:
Get-ADUser -Identity “Abbey.Crawford” -Properties * | Select sAMAccountName, extensionAttribute1
Sorting the Output
To sort the output of the Get-ADUser command using a particular property, use the following command:
Get-ADUser -Filter * | Select Name | Sort-Object -Property Name
Exporting Data to a CSV File
Example 1
The following command will find all user accounts created in the last 180 days, sort them by name, and export selected information about them to a CSV file:
Get-ADUser -filter * -properties * | Where-Object { $_.created -gt (get-date).AddDays(-180)} | select-object Name, Created | sort Name | export-csv C:\Accounts.csv -NoTypeInformation
Example 2
The command below finds all users in a particular OU and outputs selected details about them to a to a CSV file:
Here is the CSV file:
Conclusion
The Get-ADUser command is a versatile way to find one or more users that meet certain criteria. You can control which user properties are displayed and how the information is sorted, and export the output to a CSV file.
If you’re interested in a more comprehensive Active Directory and Azure AD management solution, take a look at Netwrix Directory Manager. It offers a more advanced management shell that is also fully compatible with PowerShell.
Since 2012, Jonathan Blackwell, an engineer and innovator, has provided engineering leadership that has put Netwrix GroupID at the forefront of group and user management for Active Directory and Azure AD environments. His experience in development, marketing, and sales allows Jonathan to fully understand the Identity market and how buyers think.
Время на прочтение4 мин
Количество просмотров19K
Домен Active Directory может содержать в себе сотни и даже тысячи учетных записей и для управления всеми этими аккаунтами администратору требуется значительное количество времени. Даже, если у нас уже все аккаунты разнесены по группам, ко всем группам применены политики и настроены права доступа, все равно могут возникнуть ситуации, когда по тем или иным причинам нам необходимо найти полную информацию о пользователе.
Для решения этих задач нам может помочь PowerShell, инструмент, который помимо прочего, позволяет легко проводить аудит учетных записей пользователей Active Directory. Для этих целей мы будем использовать один из самых популярных командлетов Active Directory PowerShell — Get-ADUser. С помощью этого командлета мы можем получить как указанный пользовательский объект, так и выполнить настраиваемый поиск для получения нескольких пользовательских объектов.
У вас есть несколько вариантов того, как идентифицировать пользователя: можно использовать Distinguished Name (DN), Globally Unified Identifier (GUID), идентификатор безопасности (SID) или имя учетной записи Security Account Manager (SAM). О том, как можно использовать эти варианты на практике мы поговорим чуть дальше, а пока нам надо подготовить нашу инфраструктуру PowerShell для работы с Active Directory.
Для начала работы с AD нам необходимо установить модуль Active Directory. Сделать это можно двумя способами. Прежде всего, можно установить Remote Server Administration Tools (RSAT). Сделать это можно следующим образом: нажать Start, далее Settings, затем выбрать Apps и Optional Features, после этого добавить компонент с помощью Add и в открывшемся списке выбрать RSAT: Active Directory Domain Services and Lightweight Directory Services Tools option. Для завершения установки нажать Install.
Второй способ установки RSAT еще проще. Мы можем воспользоваться функционалом самого PowerShell для установки непосредственно с узла Windows Update.
Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"
Приступим к поискам
Для поиска данных о пользователях в AD мы будем использовать параметр -Identity. Откроем модуль Active Directory Module for Windows Powershell в режиме Администратора.
Для начала поищем пользователя по его атрибуту sAMAccountName
Get-ADUser Имя_Пользователя
В результате выполнения команды мы получили значения основных полей из AD для данного пользователя. Но мы можем также поискать пользователя по другим параметрам. Например, предположим, что нам известно только значение поля objectGUID (или GUID). В таком случае команда будет иметь следующий вид:
Get-ADUser идентификатор_GUID
Еще один довольно распространенный случай, когда нам известно только значение SID и необходимо узнать, кто скрывается под этим значением. В таком случае мы также используем GetADUser с указанием SID:
Get-ADUser идентификатор_SID
Когда объектов слишком много
Представленная выше команда Get-ADUser удобна при работе в небольших средах, благодаря простоте использования. Но если в вашем домене десятки тысяч объектов, то Get-ADUser может создать заметную нагрузку на домен контроллер, с которым вы взаимодействуете при выполнении данного командлета. Дело в том, что Get-ADUser извлекает все пользовательские объекты в вашем подключенном домене AD.
Чтобы избежать подобной ситуации нам необходимо отфильтровать всю базу пользователей и выполнить поиск конкретных пользователей на основе некоторых свойств. Для решения этой задачи предназначен параметр ‘-filter’, указывающий строку запроса, которая извлекает объекты AD. В этой строке используется синтаксис PowerShell Expression Language (EL). Синтаксис PEL обеспечивает расширенную поддержку преобразования типов для типов значений, получаемых параметром Filter. Синтаксис использует представление по порядку, что означает, что оператор помещается между операндом и значением. Давайте рассмотрим несколько примеров, чтобы получить лучшее представление.
Для начала поищем все аккаунты, которые имеют статус Enabled:
Get-ADUser -filter {Enabled -eq "true"}
Здесь после параметра filter мы в фигурных скобках указываем то логическое выражение, по которому должна осуществляться фильтрация. В данном случае мы получим все активные аккаунты в домене. Если мы к примеру, хотели бы получить список всех пользователей, у которых заполнено поле E-Mail, наш запрос имел бы следующий вид:
Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Результаты работы команды мы передаем на вход команде ft (Format Table) которая переводит вывод в более читаемый вид.
Таким образом, вы можете использовать -Filter для поиска по другим полям объектов Active Directory.
Еще один пример — это поиск конкретного пользователя по заданному шаблону. Здесь мы найдем все записи, где вхождение такого шаблона используется в имени или фамилии пользователя.
Get-ADUser -Filter {name -like "*John*"} -Properties * | ft Name,EmailAddress
Давайте еще сократим нагрузку на нашу инфраструктуру AD ограничив поиск только по определенным Organizational Unit (OU). Для этого воспользуемся параметром -SearchBase.
Get-ADUser -SearchBase 'OU="Test Users",DC=domain,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
В этом примере мы выводим имена и почтовые адреса пользователей, ограничивая область действия запроса только OU “Test Users”.
По умолчанию GetADUser возвращает десять основных полей, которые мы уже видели ранее, однако мы можем изменить вывод этой команды, указав с помощью ключа Properties те поля, которые нас интересуют. Например, если нам необходимо узнать, когда пользователи в последний раз меняли свои пароли, то это можно сделать с помощью следующей команды:
Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Еще один полезный пример использования -Properties это получение списка пользователей со временем создания их аккаунтов.
Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Заключение
В этой статье мы рассмотрели полезные на практике примеры работы с Active Directory с помощью PowerShell. В следующей статье мы поговорим о том, как PowerShell может помочь при анализе журналов событий.
Также хочу пригласить вас на бесплатный урок: «Написание скриптов на PowerShell и их использование», который пройдет уже в понедельник.
-
Зарегистрироваться на бесплатный урок
