Получение списка пользователей чей срок действия пароля истек в Powershell
Для того что бы увидеть все свойства относящиеся к паролям выполните:
И затем, по этому свойству, отфильтруем пользователей:
Одной из стандартных процедур проведения аудита ITGC для каталога Active Directory является получение выгрузки всех пользователей домена. На основании полученных данных далее формируются процедуры тестирования, к примеру изучение списка администраторов или выявление пользователей с истекшим паролем. Наиболее эффективным для формирования такой выгрузки будет использование стандартного интерфейса PowerShell , примеры которого мы и рассмотрим в данной статье
Ниже представлен скрипт PowerShell, как один из наиболее простых и быстрых способов получить список всех пользователей домена AD в формате CSV, который без проблем открывается тем же Excel’ем.
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = «LDAP://ou=Users,ou=Departmets,dc=test,dc=ru» $objSearcher.Filter = «(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))» $users = $objSearcher.FindAll() # Количество учетных записей $users.Count $users | ForEach-Object < $user = $_.Properties New-Object PsObject -Property @< Должность = $user.description Отдел = $user.department Логин = $user.userprincipalname Телефон = $user.telephonenumber Комната = $user.physicaldeliveryofficename ФИО = $user.cn >> | Export-Csv -NoClobber -Encoding utf8 -Path С: list_domen_users.csv
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполним команду
Get-ADUser -identity tuser -properties *
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where <$_.name –like “*Dmitry*”>| sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv
Get-ADUser это один из основных командлетов PowerShell, который можно использовать для получения различной информации о пользователях Active Directory и их атрибутах. С помощью командлета Get-ADUser можно получить значение любого атрибута учетной записи пользователя AD, вывести список пользователей в домене с нужными атрибутами и экспортировать их в CSV, и использовать различные критерии для выборки доменных пользователей.
Комадлет Get-ADUser доступен начиная с PowerShell 2.0 и входит в специальный модуль для работы с Active Directory — Active Directory Module for Windows PowerShell (представлен в Windows Server 2008 R2). Командлеты модуля RSAT-AD-PowerShell позволяют выполнять различные операции с объектами каталога AD.
В этом примере мы покажем, как с помощью командлета PowerShell Get-ADUser получить информацию о времени последней смены пароля пользователя, дате истекает срока действия пароля и другие данные пользователей.
Как через Powershell получить список пользователей AD с Get-ADUser
01 августа 2019
Get-ADUser команда, которая возвращает список пользователей AD в Powershell. На самом деле командлет мало чем отличается от тех, которые мы рассматривали раннее с приставкой «Get-AD».
Для работы с командой нам понадобится Powershell Active Directory Module.
Так мы вернем всех пользователей AD:
Если нам нужно найти по имени, сделайте так:
Где вместо Adminis имя вашей учетной записи. Звездочки позволяют искать вхождение где справа и слева могут быть еще символы.
Для получения сведений об одной учетной записи AD есть ключ Identity:
Кроме этого у нас есть дополнительный ключ Properties, который выводит дополнительные свойства у объекта пользователя:
Если мы хотим выполнить Get-ADUser в OU, то для этого есть дополнительный ключ, который может искать в организационных единицах и контейнерах. В моем случае я ищу в OU Moscow и домене domain.local:
Если вам нужно искать в контейнере — используйте 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:
А теперь найдем всех пользователей, которые неверно вводили пароль более одного раза и в они включены:
Т.к. BadLogonCount — это свойство от ключа Properties оно должно проверятся через конвейер в Where.
Еще один пример, но теперь нужно найти пользователя имя которого содержит 0001 и он активен:
Получение списка пользователей Active Directory в Powershell Get-User из нескольких OU
В команде нет встроенных средств поиска в нескольких объектах сразу. Мы можем объявить переменную, содержащую этот список и затем передать через цикл. На моем пример используется контейнер Users и OU Moscow:
Если бы у меня была OU Ekaterinburg в которой находилось OU Marketing написать стоило бы так:
Выгрузка пользователей из AD в Excel с Powershell
Экспорт и выгрузка может быть во множество форматов, но для выгрузки в Excel есть специальный формат CSV. Для того что бы сделать выгрузку достаточно выполнить следующее:
Если мы хотим выгрузить только определенные свойства, то в поле SELECT -Property нужно их перечислить:
Получение Email пользователя AD в Powershell
Нужное свойство мы можем получить через соответствующий ключ Properties. Так я получу почту у конкретного пользователя Administrator:
Выгрузим в CSV имена только тех пользователей у которых нет почты:
Получение списка пользователей чей срок действия пароля истек в 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
Получение информации
1. Список всех групп
Get-AdGroup -filter * | Where <$_.name -like «*free*»>| fl name
* будут выбраны все группы, в названии которых встречается free.
2. Подробная информация о группе
Get-ADGroup «Domain Users» -Properties *
* где ключ -Properties * покажет информацию о всех атрибутах группы.
Показать только SID и GUID группы:
Get-ADGroup «Domain Admins» | ft ObjectGUID, SID
3. Посмотреть членов группы
Перечень членов групп с базовой информацией о каждом пользователе:
Get-ADGroupMember -Identity Administrators
Вывести на экран только имена пользователей:
Get-ADGroupMember -Identity Administrators | ft name
Get-ADGroupMember -Identity Administrators -Recursive | ft name
* в данном примере используется ключ Recursive — это позволяет вывести на экран не только членов группы Administrators, но и членов групп, которые входят в эту группу.
Вывести членов групп с подробной информацией по каждому из них:
Get-ADGroupMember -Identity «Users» | foreach
Расчет выполняется методом Count:
(Get-ADGroupMember -Identity Administrators).Count
5. В каких группах состоит пользователь
Задача немного обратная — работаем с пользователем и отображаем список групп, в которые он входит:
Get-ADUser Administrator -Properties Memberof | Select -ExpandProperty memberOf
6. Список пустых групп
Имеются ввиду группы, в которых нет ни одного пользователя:
Get-ADGroup -filter * | where <-Not ($_ | Get-ADGroupMember)>| Select Name
7. Cписок пользователей, которые не входят в конкретную группу
Get-ADuser -Filter * -Properties MemberOf | where < -Not ($_.MemberOf -match «Managers») >| Select Name
* в данном примере мы увидем список пользователей, которые не входят в группу Managers.
Как найти пользователя в AD и вывести его свойства с помощью Get-ADUser?
Для использования модуля RSAT-AD-PowerShell нужно запустить консоль PowerShell с правами администратора и импортировать модуль командой:
В Windows Server 2012 и выше модуль RSAT-AD-PowerShell устанавливается по-умолчанию при развертывании на сервере роли Active Directory Domain Services (AD DS). Для установки модуля на рядовом сервере домена нужно выполнить команду:
Install-WindowsFeature -Name «RSAT-AD-PowerShell» –IncludeAllSubFeature
В десктопных версия Windows (например, в 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).
Вы можете установить модуль AD из PowerShell:
Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools
Import-Module «C:PSADPoShMicrosoft.ActiveDirectory.Management.dll»Import-Module «C:PSADPoShMicrosoft.ActiveDirectory.Management.resources.dll»
Полный список всех аргументов командлета Get-ADUser можно получить так:
Чтобы вывести список всех учетных записей домена, выполните команду:
По-умолчанию командлет Get-ADUser возвращает только 10 основных атрибутов (из более чем 120 свойств учетных записей пользователей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.
В выводе командлета отсутствует информация о времени последней смены пароля пользователя.
Get-ADUSer –Server DC01.winitpro.loc –Identity tstuser
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполните команду:
Get-ADUser -identity tuser -Properties *
Командлет Get-ADUser с параметром Properties * вывел список всех атрибутов пользователя AD и их значения.
Попробуем изменить параметры команды Get-ADUser, чтобы вывести только нужные нам атрибуты пользователя. Можно вывести сразу несколько атрибутов пользователя:
- PasswordExpired
- PasswordLastSet
- PasswordNeverExpires
- lastlogontimestamp
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp
Теперь в информации о пользователе есть данные о статусе аккаунта (Expired:True/False), дате смены пароля и времени последнего входа в домен (lastlogontimestamp). Представим информацию в более удобном табличном виде и уберем все лишние атрибуты с помощью Select-Object –Property или Format-Table:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires
Get All Properties
As Active Directory is a very complex environment there are a lot of attributes and properties about users. By default, only some of them are printed like Name, SID, Surname, GivenName, etc. We can also list all of these attributes with the -Properties command and asterisk * .
As we can see from the screenshot that properties like AccountExpirationDate, AccountLockoutTime, … are printed.
- `AccountExprirationDate` will show the account expire day if it is set. If not there will be now value.
- `AccountExpires` will show whether the account has an expiration date.
- `AccountLockoutTime` will show the interval to lock the account when it is idle.
- `BadLogonCount` will show how many unsuccessful login attempts occurred in the past.
- `Created` will show the date and time information about the account creation.
- `Company` will show the user company name of the user account if set.
Get-ADUser: экспорт пользователей домена в текстовый или CSV/Excel файл
Полученный список пользователей домена с атрибутами можно выгрузить в текстовый файл:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C: empusers.txt
Или вы можете выгрузить пользователей AD в файл CSV, который в дальнейшем будет удобно экспортировать в Excel.
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | select Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: empuser-password-expires-2019.csv -Append -Encoding UTF8
Примеры использования 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.
Получение компьютеров
Команда, которая вернет список всех компьютеров в домене следующая:
Get-ADComputer -Filter *
1 | Get-ADComputer-Filter * |
Команда точно выполнится на домен контроллере, так как все поддерживаемые серверные версии ОС устанавливают нужный модуль Powershell вместе с Active Directory (если вы только специально не отключали эту возможность). Если вы планируете выполнять команду с клиента на Windows 7 и выше, то такой модуль устанавливается вместе с RSAT (Remote Server Administration Tools). В отдельном случае может понадобится импортировать этот модуль следующей командой:
Import-Module ActiveDirectory
1 | Import-Module ActiveDirectory |
Вы так же можете проверить, что этот модуль у вас установлен следующей командой:
Get-Module -Name ActiveDirectory
1 | Get-Module-Name ActiveDirectory |
В остальных случаях стоит смотреть на явные запреты на выполнение скриптов Powershell и чтения Active Directory.
Что бы вернуть данные по одному пользователю используется ключ Identity:
Get-ADComputer -Identity «AD1»
1 | Get-ADComputer-Identity»AD1″ |
Параметр Filter является обязательным. Вы можете вернуть дополнительные данные используя Properties:
Get-ADComputer -Filter * -Properties *
1 | Get-ADComputer-Filter *-Properties * |
Редактирование
Редактирование информации выполняется с помощью командлета Set-ADUser и передачи в качестве параметра имя атрибута с новым значением. Рассмотрим несколько примеров изменения информации с помощью данной команды.
Редактирование домашней страницы пользователя
> Set-ADUser dmosk -HomePage «dmosk.ru»
* в данном примере редактируется домашняя страница для пользователя с логином dmosk.
Редактирование телефона
> Get-ADUser -Filter dmosk -Properties OfficePhone | % { Set-ADUser $_ -OfficePhone «+7(812)999-99-99» }
* редактируем атрибут OfficePhone. Последний не выводится командой по умолчанию, поэтому мы указываем его в параметре -Properties.
Редактирование мобильного телефона по ФИО пользователя
> Get-ADUser -Filter {name -eq ‘Иванов Иван Иванович’} -Properties mobile | % { Set-ADUser $_ -mobile «+7(999)999-99-99» }
* сначала находим пользователя по ФИО, затем редактируем атрибут mobile.
Редактирование комнаты сотрудника
> Set-ADUser dmosk -Office «Санкт-Петербург, Невский проспект»
* в данном примере редактируется местонахождение сотрудника с именем входа dmosk.
Добавление пользователя в группу
> Add-ADGroupMember -Identity «Группа в AD» -Member master
* с помощью данной команды мы добавим пользователя master в группу Группа в AD.
Задать подразделение, в котором работает пользователь
Редактируем атрибут department:
> Set-ADUser dmosk -department «Отдел сопровождения железнодорожных молекул»
* в данном примере мы указали, что пользователь dmosk работает в «Отделе сопровождения железнодорожных молекул».
List Domain Users Interactively
We will start with a simple example. We will list all domain users. In this example, we will do not provide any option or parameter to the Get-ADUser command. But after running the command we will be asked for a filter. We will provide asterisk * as a filter which means all users.
The following information is provided with the Get-ADUser command.
- `DistingushedName` will provide the complete canonical name for the user.
- `Enabled` will show whether the user account is enabled or not.
- `GivenName` is the human-readable name which is generally the name and surname of the user.
- `ObjectClass` is the user type which is generally `user`.
- `ObjectGUID` is the unique ID of the current user or object.
- `SamAccountName` is the or SAM account name of the user.
Фильтры для выгрузки из AD пользователей в Powershell
При выполнении предыдущей команды мы экспортировали только свойства, которые выводятся при ее обычном выполнении. Мы не выгрузили свойства, например, LastLogon, почту или город. Для того что бы увидеть все свойства, которые хранит объект (команда) нужно сделать следующее:
Большинство того, что в колонке MemberType — это свойства, которые мы можем добавлять для вывода.
Если вам не важно то, что у вас будет куча столбцов, то выгрузить все можно так:
В моем случае в качестве разделителя CSV я установил запятую и исключил техническую информацию о командлете экспорта.
Если я хочу экспортировать только конкретные свойства или исключить другие, например SID и GUID, то нужно делать так:
Мы можем фильтровать данные и по их свойству. Т.е. можно получить пользователей конкретно по фамилии, только отключенных или созданных до определенной даты и т.д.. Так я получу объекты, имя которых содержит строку test:
А это пример посложнее. Тут я нашел все объекты, которые включены и созданны за последние 15 дней:
Если интересно, то тут примеры как работать с Get-Date. Ключ eq ищет точное сравнение, а gt значит больше чем.
Получение компьютеров
Команда, которая вернет список всех компьютеров в домене следующая:
Команда точно выполнится на домен контроллере, так как все поддерживаемые серверные версии ОС устанавливают нужный модуль Powershell вместе с Active Directory (если вы только специально не отключали эту возможность). Если вы планируете выполнять команду с клиента на Windows 7 и выше, то такой модуль устанавливается вместе с RSAT (Remote Server Administration Tools). В отдельном случае может понадобится импортировать этот модуль следующей командой:
Вы так же можете проверить, что этот модуль у вас установлен следующей командой:
В остальных случаях стоит смотреть на явные запреты на выполнение скриптов Powershell и чтения Active Directory.
Что бы вернуть данные по одному пользователю используется ключ Identity:
Параметр Filter является обязательным. Вы можете вернуть дополнительные данные используя Properties:
Вам так же будет интересно: