Get-ADUser: поиск сведений о пользователях и фильтр пользователей по их свойствам в Active Directory

Get-ADUser — это один из базовых командлетов PowerShell, который можно использовать для получения информации о пользователях домена Active Directory и их свойствах. Вы можете использовать Get-ADUser, чтобы просмотреть значение любого атрибута объекта пользователя AD, отобразить список пользователей в домене с необходимыми атрибутами и экспортировать их в CSV, а также использовать различные критерии и фильтры для выбора пользователей домена.

Командлет Get-ADUser доступен начиная с PowerShell 2.0 и является частью специального модуля Active Directory для Windows PowerShell (представленного в Windows Server 2008 R2). Командлеты RSAT-AD-PowerShell позволяют выполнять различные операции с объектами AD.

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

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

Как найти пользователя AD и вывести список свойств с помощью Get-ADUser

Чтобы использовать командлет Get-ADUser необходимо установить Модуль Active Directory для Windows PowerShell, в каких системах он уже присутствует и как его установить если он ещё не установлен, смотрите в статье «Как установить и использовать модуль Active Directory PowerShell». На рабочих станциях данный модуль вы можете установить следующей командой:

Add-WindowsCapability -online -Name "Rsat.ActiveDirectory.DS-LDS.Tools"

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

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

Get-ADUser -Filter *

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

Чтобы выполнить запрос AD на конкретном контроллере домена, используйте опцию -Server. Чтобы вывести информацию по определённому пользователю, укажите его имя после опции -Identity:

Get-ADUser -Server ds.hackware.ru -Identity MiAl

Чтобы изменить атрибуты пользователя, используйте командлет Set-ADUser.

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

Чтобы отобразить подробную информацию обо всех доступных пользовательских атрибутах, выполните эту команду:

Get-ADUser -Identity MiAl -Properties *

Командлет Get-ADUser с опцией «-Properties *» отображает список всех пользовательских атрибутов AD и их значений.

Теперь мы перейдём к форматированию вывода Get-ADUser, чтобы отображались необходимые атрибуты пользователя. Вы можете отображать сразу несколько атрибутов пользователя:

  • PasswordExpired (Срок действия пароля истёк)
  • PasswordLastSet (Последний раз пароль установлен)
  • PasswordNeverExpires (Пароль никогда не истекает)
  • LastLogonTimestamp (Временная метка последнего входа)

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

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

Get-ADUser MiAl -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires,lastlogontimestamp

Теперь в пользовательских данных есть информация о статусе учётной записи (Истёк ли срок действия пароля: True/False), дате последней смены пароля и времени последнего входа пользователя в домен. Чтобы отобразить эту информацию в более удобном табличном виде и удалить все ненужные атрибуты, используйте Select-Object -Property или Format-Table:

Get-ADUser -Filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Get-ADUser: поиск в нескольких подразделениях с помощью SearchBase

Чтобы отображать пользователей только из определённого контейнера домена (организационного подразделения), используйте опцию -SearchBase:

Get-ADUser -SearchBase 'OU=London,DC=hackware,DC=loc' -filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Если вам нужно выбрать пользователей из нескольких подразделений одновременно, используйте следующий скрипт PowerShell:

$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | ForEach-Object {Get-ADUser -SearchBase $_ -Filter * | Select-Object Name,Enabled}

Работа с email адресами пользователей в Active Directory с помощью PowerShell

Адрес электронной почты пользователя — это один из атрибутов объекта пользователя в Active Directory. Чтобы перечислить адреса электронной почты пользователей, необходимо добавить поле EmailAddress в значение опции -Properties командлета Get-ADUser.

Get-ADUser -Filter * -Properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=hackware,DC=ru'| 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

Чтобы получить список пользователей Active Directory без адреса электронной почты:

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

Следующий пример позволяет экспортировать адресную книгу электронной почты компании из AD в файл 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\adress_list.csv

Get-ADUser: экспорт пользователей AD в CSV/TXT

Полученный список пользователей домена с атрибутами можно экспортировать в текстовый файл:

Get-ADUser -Filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires > C:\temp\users.txt

Или вы можете экспортировать список пользователей AD в файл CSV (который позже будет удобно импортирован в Excel):

Get-ADUser -filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Where-Object {$_.name –like "*Dmitry*"} | Sort-Object PasswordLastSet | Select-Object Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8

Использование Get-ADUser с фильтрацией по атрибутам

Используя опцию -Filter, вы можете фильтровать список учётных записей пользователей по одному или нескольким атрибутам. В качестве аргументов этого параметра можно указать значение определённых атрибутов пользователей Active Directory. Если вы используете параметр -Filter, командлет Get-ADUser будет перечислять только тех пользователей, которые соответствуют критериям фильтра.

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

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

Смотрите также: Операторы сравнения в PowerShell

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

Get-ADUser -Filter * -properties PasswordExpired,PasswordLastSet,PasswordNeverExpires -SearchBase 'OU=NY,DC=hackware,DC=ru'| Where-Object {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | Sort-Object PasswordLastSet | Select-Object Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Таким образом, вы можете составить таблицу с любыми необходимыми атрибутами пользователей Active Directory.

Примеры использования Get-ADUser

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

Отобразить пользователей AD, имя которых начинается с Joe:

Get-ADUser -Filter {name -like "Joe*"}

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

Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object

Вывод списка пользователей и их свойств, размещённых в определённом организационном подразделении (контейнере) в данном случае это OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM:

Get-ADUser -Filter * -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM"

Найти отключённые учётные записи пользователей Active Directory:

Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

Вы можете проверить дату создания учётной записи пользователя Active Directory с помощью команды:

Get-ADUser -Filter * -Properties Name,WhenCreated | Select name,whenCreated

Вы можете получить список недавно добавленных пользователей Active Directory, созданных за последние 24 часа:

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

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

Get-ADUser -Filter {Enabled -eq $True} -Properties name,passwordExpired | Where-Object {$_.PasswordExpired}| Select-Object name,passwordexpired

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

Задача: для списка учётных записей, которые хранятся в текстовом файле (по одной учётной записи в строке), вам необходимо получить название компании пользователя из AD и сохранить его в файл CSV (вы можете легко импортировать этот файл в Excel).

Import-Csv c:\ps\users_list.csv | ForEach {
	Get-ADUser -Identity $_.user -Properties Name,Company |
	Select-Object Name,Company |
	Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}

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

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

Чтобы получить фотографию пользователя из Active Directory и сохранить её в файле jpg, выполните следующие команды:

$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte

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

Get-AdUser MiAl -Properties memberof | Select-Object memberof -ExpandProperty memberof

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

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=hackware,DC=ru' -Filter * -Properties memberof | Where-Object {($_.memberof -like "*CEO*")}

Перечислить компьютеры домена, на которых пользователю разрешён вход.

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

Чтобы искать компьютеры и фильтровать компьютеры по их свойствам в Active Directory, вы можете использовать другой командлет – Get-ADComputer.

Рекомендуется Вам:

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

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