Как через Powershell получить список пользователей AD с Get-ADUser
Get-ADUser команда, которая возвращает список пользователей AD в Powershell. На самом деле командлет мало чем отличается от тех, которые мы рассматривали раннее с приставкой «Get-AD».
Для работы с командой нам понадобится Powershell Active Directory Module.
Так мы вернем всех пользователей AD:
Get-ADUser -Filter *
Если нам нужно найти по имени, сделайте так:
Get-ADUser -Filter
Где вместо Adminis имя вашей учетной записи. Звездочки позволяют искать вхождение где справа и слева могут быть еще символы.
Для получения сведений об одной учетной записи AD есть ключ Identity:
Get-ADUser -Identity Administrator -Properties *
Кроме этого у нас есть дополнительный ключ Properties, который выводит дополнительные свойства у объекта пользователя:
Get-ADUser -Properties * -Filter
Если мы хотим выполнить Get-ADUser в OU, то для этого есть дополнительный ключ, который может искать в организационных единицах и контейнерах. В моем случае я ищу в OU Moscow и домене domain.local:
Get-ADUser -SearchBase "OU=Moscow,DC=domain,DC=local" -Filter * -Properties *
Если вам нужно искать в контейнере — используйте CN. Примеры с множеством OU смотрите ниже.
Навигация по посту
- Примеры Powershell Get-ADUser Filter
- Несколько OU в Get-ADUser
- Выгрузка пользователей из AD в Excel
- Получение Email пользователя в Powershell
- Примеры с паролями
Поиск и фильтрация списка пользователей AD в Powershell Get-ADUser -Filter
Мы можем фильтровать по одному или множеству свойств. Для того что бы увидеть все свойства нужно сделать:
В области 1 выделены все имена, по которым мы можем фильтровать. В области 2 тип данных с которыми мы можем сравнивать. Т.е. если тип данных у области 2 string (строка), то это плохая идея сравнивать с числом (int). Нужно сразу отметить, что те свойства, которые мы получаем благодаря ключу Properties мы не можем применять в Filter.
Примеры с Get-Member мы уже рассматривали раньше.
Для примера так мы можем получить всех пользователей, у которых указан город Moscow:
Get-ADUSer -Properties * -Filter City | Where-Object -Property City -eq "Moscow"
А теперь найдем всех пользователей, которые неверно вводили пароль более одного раза и в они включены:
Get-ADUser -Properties * -Filter | Where-Object -Property BadLogonCount -gt 1
Т.к. BadLogonCount — это свойство от ключа Properties оно должно проверятся через конвейер в Where.
Еще один пример, но теперь нужно найти пользователя имя которого содержит 0001 и он активен:
Получение списка пользователей Active Directory в Powershell Get-User из нескольких OU
В команде нет встроенных средств поиска в нескольких объектах сразу. Мы можем объявить переменную, содержащую этот список и затем передать через цикл. На моем пример используется контейнер Users и OU Moscow:
$ou = "OU=Moscow,DC=domain,DC=local","CN=Users,DC=domain,DC=local" $ou | foreach
Если бы у меня была OU Ekaterinburg в которой находилось OU Marketing написать стоило бы так:
"OU=Marketing,OU=Ekaterinburg,DC=domain,DC=local"
Выгрузка пользователей из AD в Excel с Powershell
Экспорт и выгрузка может быть во множество форматов, но для выгрузки в Excel есть специальный формат CSV. Для того что бы сделать выгрузку достаточно выполнить следующее:
Get-ADUser -Filter * | Export-Csv -Path C:\data.csv -NoTypeInformation
Если мы хотим выгрузить только определенные свойства, то в поле SELECT -Property нужно их перечислить:
Get-ADUser -Property -Filter * | SELECT -Property whenChanged,StreetAddress | Export-Csv -Path C:\data.csv -NoTypeInformation
Получение Email пользователя AD в Powershell
Нужное свойство мы можем получить через соответствующий ключ Properties. Так я получу почту у конкретного пользователя Administrator:
Выгрузим в CSV имена только тех пользователей у которых нет почты:
$result = Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -EQ $null $result | SELECT -Property Name | Export-Csv -Path C:\data.csv -NoTypeInformation
Получение списка пользователей чей срок действия пароля истек в Powershell
Для того что бы увидеть все свойства относящиеся к паролям выполните:
И затем, по этому свойству, отфильтруем пользователей:
Get-ADUser -Filter * -Properties PasswordExpired | where -Property PasswordExpired -eq $true
Выгрузка пользователей Active Directory в файл
В работе администратора домена встречаются задачи, когда нужно проанализировать какой-то лог, в котором указаны аккаунты пользователей или даже их SID, а для отчета необходимы имена и фамилии людей. Для решения задачи сопоставления SamAccountName и objectSID с именем пользователя я использую таблицу-выгрузку из Active Directory, в которой есть все нужные мне поля: Name, SamAccountName, objectSid, Enabled и прочие.
Например у меня есть лог веб-сервера IIS, в котором колонка csusername содержит SamAccountName или objectSid пользователя, который запросил страничку сайта. В Excel с помощью функции ВПР можно легко сцепить таблицы и вывести для каждого запроса имя пользователя.
Ниже представлен скрипт PowerShell, который выгружает список пользователей из AD в CSV-файл.
#--- Variables --- # Контейнер поиска пользователей $ADSearchBase "CN=Users,DC=domain,DC=com" # --- Functions --- # Функция получения свойств пользователя из Active Directory Function GetUserInfo ($UserAccount) < # Создание нового объекта пользователя и добавление в него пустых свойств $UserProperties = New-Object System.Object $UserProperties | Add-member -MemberType NoteProperty -Name Name -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name SamAccountName -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name Enabled -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name passwordlastset -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name passwordneverexpires -Value $Null $UserProperties | Add-member -MemberType NoteProperty -Name mail -Value $Null $UserProperties | Add-member -MemberType NoteProperty -Name employeeID -Value $Null $UserProperties | Add-member -MemberType NoteProperty -Name objectSid -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name Site -Value $Null $UserProperties | Add-Member -MemberType NoteProperty -Name Country -Value $Null # Получение свойств пользователя из Active Directory $V0 = Get-ADUser -Filter -properties passwordlastset, passwordneverexpires, employeeID, mail, objectSid # Заполнение свойств пользователя $UserProperties.Name = $V0.Name $UserProperties.SamAccountName = $V0.SamAccountName $UserProperties.Enabled = $V0.Enabled $UserProperties.PasswordLastSet = $V0.passwordlastset $UserProperties.PasswordNeverExpires = $V0.passwordneverexpires $UserProperties.Mail = $V0.Mail $UserProperties.employeeID = $V0.employeeID $UserProperties.objectSid = $V0.objectSid # В этом примере структура контейнеров в AD устроена по принципу CN=Users, затем OU=Страна, затем OU=Город # Поэтому от полного имени объекта отделяются 2 предпоследних члена, чтоб заполнить Страну и Город $V1 = ($V0.DistinguishedName).Split(",") $UserProperties.Site = ($V1[1]).Substring(3) $UserProperties.Country = ($V1[2]).Substring(3) Return $UserProperties > # --- Start --- Import-Module ActiveDirectory # Текущая дата $TodayDate = Get-Date -Format "yyyy-MM-dd" # Путь к файлу с отчетом $OutFile = (Get-Childitem env:USERPROFILE).Value + "\Desktop\" + $TodayDate + "_UsersList.csv" If (Test-Path $OutFile) < Remove-Item -Path $OutFile ># Список пользователей объекта Active Directory, о которых нужно получить отчет $Users = Get-ADUser -Filter '*' -SearchBase $ADSearchBase Write-Host ($Users.Count.ToString() + " users found") # Выгрузка свойств пользователей в файл $Users | sort-object Name | ForEach-Object | ` Export-Csv $OutFile -Delimiter "`t" -Encoding UTF8 -NoClobber -NoTypeInformation Write-Host Write-Host "The result is in $OutFile file."
В результате работы скрипта получается файл Дата_UsersList.csv, который лежит на рабочем столе пользователя, который запускал скрипт.
Использование Get-ADUser для получения разной информации о пользователях домена AD
Не секрет, что начиная с первой версии 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. Для получения информации о пользователях домена Active Directory и их свойствах предназначен командлет Get-ADUser. С помощью командлета Get-ADUser можно получить значение любого атрибута существующей учетной записи пользователя в AD. Кроме того, можно указывать различные критерии выборки и формировать списки пользователей домена и их атрибутов.
В этом примере мы покажем, как с помощью командлета PowerShell Get-ADUser получить информацию, о том, когда последний раз менялся пароля пользователя и когда истекает срок его действия.
Запускаем окно Powershll с правами администратора и импортируем модуль Active Directory командой:
Import-Module activedirectory
Совет. В Windows Server 2012 и выше этот пункт можно пропустить, так как модуль PowerShell Active Directory подключен по-умолчанию.
В клиентских ОС (в той же Windows 10) для работы коммандера Get-AdUser нужно установить соответствующую версию RSAT и включить в панели управления компонент Active Directory Module for Windows PowerShell (Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> AD DS Tools).
Полный список всех аргументов командлета Get-ADUser можно получить так:
help Get-ADUser
Чтобы вывести список всех учетных записей домена, выполним команду:
Get-ADUser -filter *
Важно. Не рекомендуется выполнять эту команду в доменах с большим количеством аккаунтов, т.к. возможно перегрузка контроллера домена, предоставляющего данные.
Формат возвращаемого списка не очень удобен для использования, выводится только некоторые основные 10 из более 120 атрибутов и свойств учетных записей пользователей (DN, SamAccountName, Name, SID, UPN и т.д) кроме того, мы видим, что информация о времени последней смены пароля отсутствует.
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполним команду:
Get-ADUser -identity tuser -properties *
Итак, мы видим полный список атрибутов пользователя AD и их значений, ассоциированных с учетной записью пользователя. Далее мы перейдем к форматированию вывода командлета Get-ADUser, так, чтобы отображались нужные нам поля. Нас интересуют атрибуты:
- PasswordExpired
- PasswordLastSet
- PasswordNeverExpires
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires
Теперь в данных пользователя есть информация о дате смены пароля и времени, когда срок пароля истечет. Представим информацию в более удобном табличном виде:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Чтобы вывести данные пользователей из определенной 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 | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\user-password-expires-2015.csv
Таким образом, можно построить таблицу с любыми необходимыми атрибутами пользователей Active Directory.
Совет. Для получения данных о компьютерах Active Directory используется командлет Get-ADComputer.
Для получения списка учетных записей пользователей AD по определенному признаку используется параметр –Filter. В качестве аргументов этого параметра можно указать значение определённых атрибутов пользователей Active Directory, в результате командлет Get-ADUser будет применятся для пользователей, которые попадают под критерии фильтра.
Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory с помощью различных фильтров. Вы можете их комбинировать для получения необходимого списка пользователей AD:
Вывод пользователей AD, имя которых начинается с Roman:
Get-ADUser -filter
Чтобы подсчитать общее количество всех аккаунтов в Active Directory:
Get-ADUser -Filter | Measure-Object
Список всех активных (не заблокированных) учетных записей в AD:
Get-ADUser -Filter | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table
Список учетных записей с истекшим сроком действия пароля:
Get-ADUser -filter -properties passwordExpired | where
Список активных учеток с почтовыми адресами:
Get-ADUser -Filter <(mail -ne "null") -and (Enabled -eq "true")>-Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table
Задача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетке в строке) нужно получить телефон пользователя в AD и выгрузить информацию в текстовый csv файл (можно легко импортировать в Esxel).
Import-Csv c:\ps\usernsme_list.csv | ForEach
Следующий пример позволяет выгрузить адресную книгу предприятия в виде 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
Чтобы получить фотографию пользователя из 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
(Всего просмотров: 29 793, просмотров сегодня: 2)
IT-аутсорсинг – это надежно и выгодно.
Профессиональная поддержка ПК, поддержка IT-системы в целом – это то, о чем нужно задуматься уже сегодня. Доверьте это специалистам. Успехов!
Попробуйте наши услуги обслуживания и получите третий месяц обслуживания в подарок!
Получение списка пользователей в группе AD и выгрузка в CSV
В этой статье мы рассмотрим несколько примеров использования PowerShell для получения списка пользователей в различных группах Active Directory. Данная статья должна научить вас получать список учетных записей определенной группы AD и экспортировать полученный список пользователей с различными атрибутами в CSV файл, с которым удобно работать в Excel.
Ранее для построения списка пользователей в группах Active Directory приходилось использовать скрипты VBScript, или утилиты командной строки DSQuery или CSVDE, недостаточно гибкие и удобные.
Для взаимодействия с AD Microsoft разработала специальный модуль Active Directory Module для Windows PowerShell. Впервые данный модуль появился в Windows Server 2008 R2 и для его использования нужно сначала его загрузить в вашу сессию PowerShell командой:
В Windows Server 2012 / R2 / Windows Server 2016 этот модуль автоматически устанавливается и загружается при установке на сервере роли ADDS (Active Directory Domain Services), т.е. при повышении сервера до контроллера домена.
В настольных пользовательских операционных системах (Windows 10 / 8 / 7) модуль Active Directory для Windows PowerShell входит в состав RSAT, который нужно скачать, устанавливать и активировать модуль для работы с AD отдельно.
Обратите внимание, что для использования в сессии PowerShell модуля ActiveDirectory не обязательно иметь права администратора домена. Получить информацию о пользователях и группах из AD может любой аутентифицированный пользователь домена.
Для получения информации об учетных записях, которые входят в группу безопасности Active Directory используется командлет Get-ADGroupMember.
Например, чтобы вывести на экран список членов группы Domain Admins, нужно выполнить команду:
Get-ADGroupMember ‘Domain Admins’
В том случае, если вы не знаете точного имени группы, можно вывести список всех групп в AD с помощью команды:
Get-ADGroup -filter * | sort name | select Name
Чтобы отобразить только имена пользователей в группе:
Get-ADGroupMember -Identity ‘Domain Admins’| ft name
Если в указанной группе содержатся другие группы AD, для вывода членов группы с учетом вложенных групп нужно использовать параметр Recursive .
Get-ADGroupMember -Identity ‘Domain Admins’ -Recursive | ft name
Переключатель –recursive предписывает команде get-adgroupmember получать список пользователей из каждой вложенной группы и выводить только объекты, не являющиеся контейнерами (пользователей или компьютеры). Т.е. данная команда отобразит даже тех пользователей, которые напрямую не входят в группу.
Можно вывести более подробную информацию об учетных записях в данной группе таким образом:
Get-ADGroupMember -Identity ‘Domain Admins’ | foreach
Рассмотрим более сложную конструкцию PowerShell, которая позволяет вывести всех членов определённой доменной группы безопасности с информацией о компании, подразделении и должности с последующей сортировкой и разбивкой на блоки с зависимости от конкретного аттрибута (допустим нам нужно сгруппировать пользователей по полю Компания — company ):
Get-ADGroupMember -Recursive ‘Domain Admins’ | ForEach -Properties displayName, company, title, department> | Sort-Object company,displayName | Format-Table displayName,company,department,title -GroupBy company -AutoSize
Для выгрузки полученного списка в текстовый файл в конце предыдущей команды нужно добавить конвейер:
| Out-File -Width 4000 «C:\TxT\GetUsersADGroupByCompany.txt»
Для выгрузки списка пользователей группы в CSV файл нужно добавить такой конвейер:
| Export-Csv -NoTypeInformation .\GetUsersADGroupByCompany.csv -Encoding Unicode
Можно посчитать общее количество пользователей в группе:
(Get-ADGroupMember -Identity ‘Domain Admins’).Count
Еще один полезный пример. Попробуем найти все группы AD содержащие в имени шаблон *Manager*, и выведем пользователей, которые входят в эти группы. Чтобы выводить только уникальные объекты, воспользуемся аргументом -uniq.
Get-ADGroup -filter ‘SamAccountName -like «*Manager*»‘ | Get-ADGroupMember -recursive|Select-Object -uniq
Если при выполнении команды Get-ADGroupMember появится ошибка:
Get-ADGroupMember : The specified directory service attribute or value does not exist
Значит в состав группы входят пользователи из других лесов. Командлет Get-ADGroupMember не поддерживает работу с пользователями из разных лесов AD.
Для добавления пользователей в группы AD нужно использовать командлет Add-ADGroupMember.