PowerShell: Get-ADUser – командлет для получения информации о пользователях Active Directory | Windows для системных администраторов

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

Не секрет, что начиная с первой версии PowerShell, Microsoft пытается сделать из него основной инструмент администрирования Windows. И во многом это получается! Сегодня на простых примерах, мы покажем возможности PowerShell, которые можно использовать для получения различной информации о пользователях Active Directory и их атрибутах.

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

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

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

Запускаем окно Powershll с правами администратора и импортируем модуль Active Directory командой:

Import-Module activedirectory
Совет. В Windows Server 2012 и выше этот пункт можно пропустить, так как модуль PowerShell Active Directory подключен по-умолчанию.

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

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

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

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

Get-ADUser -identity tuser -properties *

Get-ADUser - все свойства пользователя в Active DirectoryИтак, мы видим полный список атрибутов, ассоциированных с учетной записью пользователя. Далее мы перейдем к форматированию вывода командлета Get-ADUser, так, чтобы отображались нужные нам поля. Нас интересуют атрибуты:

  • PasswordExpired
  • PasswordLastSet
  • PasswordNeverExpires

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

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUse - время смены и истечения срока действия пароля в ADТеперь в данных пользователя есть информация о дате смены пароля и времени, когда он просрочиться. Представим информацию в более удобном табличном виде:

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

Get-ADUser - табличное преставление о свойствах пользователейЧтобы вывести данные пользователей из определенной OU, воспользуемся параметром SearchBase:

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

Результат выполнения команды можно выгрузить в текстовый файл:

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

Или в CSV, который в дальнейшем будет удобно экспортировать в Excel (дополнительно с помощью sort-object отсортируем таблицу по столбцу PasswordLastSet , а также добавим условие where – имя пользователя должно содержать строку «Dmitry»):

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

Get-ADUser с условием where и сохранением в csv

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

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

Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory:

Вывод пользователей 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 {Enabled -eq $True} -properties passwordExpired | where {$_.PasswordExpired}

Список активных учеток с почтовыми адресами:

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

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

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

$90_Days = (Get-Date).adddays(-90)

Get-ADUser -filter {(passwordlastset -le $90_days)}
Еще записи по теме: PowerShell
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 21

Оставить комментарий
  1. myr4ik07 | 21.05.2015

    Ох і довжина команд

    Ответить
  2. Владимир | 22.05.2015

    OU=Moskow аж режет глаз

    Ответить
    • itpro | 22.05.2015

      Да, спасибо поправил. Торопился :)

      Ответить
  3. Роман | 18.06.2015

    А как сделать выборку польлзователей не всего домена, а конкретного контейнера/папки этого домена?
    Т.е. к примеру, есть домен REGION, под ним папки-контейнеры с названием каждого региона и его пользователей, как сделать выборку пользователей контейнера, на пример, SAMARA?

    Ответить
    • itpro | 18.06.2015

      В статье описано как фильтровать пользователей по контейнерам Active Directory (OU), для этого воспользуйтесь аргументом SearchBase, например так:
      Get-ADUser -SearchBase ‘OU=Samara,DC=company,DC=com’ -filter *

      Ответить
  4. dimokkk | 03.09.2015

    Поделюсь примером скрипта, когда на входе подается список учетных записей AD из csv файла, а на выходе нужно получить значение поля Компания (Company):
    Import-Csv c:\install\ps\sap_user.csv | ForEach {
    Get-ADUser -identity $_.user -Properties Name, company |
    Select Name, company |
    Export-CSV c:\install\ps\export_ad_info.csv -Append -Encoding UTF8
    }

    Ответить
  5. Тимур | 01.10.2015

    Добрый день!

    А как сделать выборку пользователей, кто давно не логинился в домене?

    Ответить
  6. Алим | 27.10.2015

    Здравствуйте, подскажите пожалуйста а как выгрузить в CSV?
    Учетные записи созданные. допустим с 01.01.2015. Удалось получить список учеток командой
    $MDate = ((Get-Date).AddDays(-299)).Date
    Get-ADUser -Filter {whenCreated -ge $MDate} -property whencreated|sort name|ft name,samaccountname,whencreated -AutoSize
    а выгрузить в ехсель не получается.

    Ответить
    • itpro | 28.10.2015

      Попробуйте добавить в конце второй строки: | Out-File c:\scripts\aduser.csv

      Ответить
      • Алим | 28.10.2015

        Спасибо большое. Помогло
        $MDate = ((Get-Date).AddDays(-300)).Date
        Get-ADUser -Filter {whenCreated -ge $MDate} -property whencreated|sort name|ft name,samaccountname,whencreated –AutoSize |out-file “C:\Temp\users.csv”

        Ответить
  7. Алексей | 04.04.2016

    Здравствуйте, подскажите есть ли возможность просмотреть кто из админов менял пароль юзера с датой конечно.

    Ответить
    • itpro | 06.04.2016

      С помощью Get-ADUser этого сделать не получится, т.к. данная информация в AD не хранится. Единственный способ поиска учетки, из-под которой был сброшен пароль пользователя, поиск в журнале безопансоти контроллеров домена (всех DC!!!, т.к. журналы независимы)событий с Event ID:
      4738: A user account was changed
      4724: An attempt was made to reset an accounts password
      Это будет рабоать при условии, что включена политика аудита Windows Settings → Security Settings → Local Policies → Audit Policy:
      Audit account management

      Ответить
      • Алексей | 07.04.2016

        Спасибо.

        Ответить
  8. Денис | 21.04.2016

    Помогите пожалуйста, очень нужно.
    Как сделать выгрузку в csv по параметрам:
    Общие=> (имя; выводимое имя; Описание )
    Организация => ( Организация )
    Учётная запись => ( Имя входа пользователя ; параметры учётной записи => Запретить смену пароля пользователем, срок действия пароля не ограничен; Срок действия учётной записи задавать или ставить «Никогда»)
    Или хотя бы ссылки на материал где можно это быстро просмотреть.
    Оч нужно.

    Ответить
    • itpro | 04.05.2016

      Строка для получения данного списка из определенной OU домена
      Get-ADUser -SearchBase ‘OU=Users,OU=London,DC=winitpro,DC=ru’ -filter * -properties displayName, company, sAMAccountName, userAccountControl | ft displayName, company, sAMAccountName, userAccountControl | Export-csv -path c:\temp\users2016.csv
      Расшифровать данные флагов поля userAccountControl можно с помощью статьи _https://support.microsoft.com/ru-ru/kb/305144

      Ответить
  9. ALARMus | 24.05.2016

    Подскажите почему при экспорте в csv полей CN и Name в результате вместо имен одни вопросительные значки в полученном csv.

    Ответить
    • itpro | 24.05.2016

      Проблема с русской кодировкой. В качетсве аргумента функции Export-csv добавьте -Encoding UTF8

      Ответить
  10. Dryi | 05.07.2016

    Мне выдал результат поиска по началу имени только последние 16 УЗ. Как получить все остальное?

    Ответить
    • itpro | 26.07.2016

      Показывайте команду :)

      Ответить
  11. Олег | 25.08.2016

    Здравствуйте!
    Вставляю команду «Список всех активных (не заблокированных) учетных записей в AD», а мне выдают тех пользователей, которые отключены(т.е. не активны).

    Ответить
  12. Sasha Odarchuk | 01.09.2016

    А как получить кол-во (и список) юзеров с сортировкой по полю Company?

    Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

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

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



MAXCACHE: 0.27MB/0.00182 sec