Найти пользователей Active Directory с истекшим сроком действия пароля (PowerShell). Вы отвечаете за управление паролями в вашей среде Active Directory (AD)? Одной из важных задач является идентификация пользователей, у которых пароли истекли, поскольку эти пользователи больше не смогут войти в свои учетные записи, пока не сменят пароль. В этой статье показано, как эффективно использовать PowerShell для поиска пользователей Active Directory с истекшими паролями.
Давайте начнем нашу статью блога о поиске пользователей Active Directory с истекшим сроком действия пароля (PowerShell).
Найти пользователей AD с истекшими паролями с помощью PowerShell
Следуя этой статье, можно сэкономить время и усилия, так как мы быстро можем нацеливаться на конкретных пользователей для уведомлений о сбросе пароля или истечении срока действия. Будь то сетевой администратор или просто человек, стремящийся улучшить безопасность вашей среды Active Directory, этот руководство предоставляет информацию, необходимую для начала работы.
Предварительные требования
Если мы планируем следовать этой статье, нам понадобится следующее:
- A Windows computer joined to an Active Directory domain.
- Установленный модуль ActiveDirectory на компьютере.
- Кроме того, на компьютере должен быть установлен как минимум Windows PowerShell 5.1 или более поздняя версия.
Поиск пользователей в Active Directory
Перед сбросом пароля пользователя сначала необходимо найти учетную запись. Поэтому наш первый шаг должен состоять в определении, существует ли резерв. Для этого запустите командлет Get-ADUser с параметром Identity, установленным на имя учетной записи.
Параметр Identity принимает один из четырех идентификаторов: уникальное имя (DN), GUID (objectGUID), идентификатор безопасности (objectSID) или имя учетной записи SAM (SAMAccountName).
Например, если мы запросим сброс пароля для определенного пользователя, мы должны сначала проверить, существует ли пользователь перед выдачей сброса учетной записи. Для этого скопируйте следующую команду и вставьте ее в наш PowerShell консоль. Обязательно сначала измените имя пользователя на правильное:
Get-ADUser -Identity
Команда вернула свойства пользователя, как показано на скриншоте ниже, подтверждая, что учетная запись существует, и имя пользователя правильное:
Также читайте Включить отчеты о пользователях Active Directory
Поиск пользователей с истекшим паролем в AD
Мы можем быстро получить дату истечения пароля для одного пользователя, добавив и используя атрибут msDS-UserPasswordExpiryTimeComputed с командой Get-ADUser:
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
Но эта строка кода приведет к нечитаемому выводу для человека, поэтому нам нужно добавить следующую строку, чтобы преобразовать результаты в читаемый формат. Чтобы добавить эту строку, мы будем использовать команду Select-Object -Property на новой PowerShell конвейере:
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
Запуская тот же атрибут, msDS-UserPasswordExpiryTimeComputed, с правильным фильтром, мы получаем список учетных записей Active Directory и время истечения их паролей:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Мы улучшаем вышеуказанный сценарий, экспортируя список пользователей в текстовый файл, который мы могли бы использовать позже. Для этого мы можем использовать команду Out-File, которая отправит вывод в текстовый файл:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
Сценарий выше создает файл с именем userslist.txt, который мы можем использовать позже. Мы также опустили свойство ExpiryDate из вывода, так как нам нужны только идентификаторы учетных записей, которые истекли. Мы используем этот список для массовой коррекции, о которой будет рассказано позже в статье.
Также читайте Развертывание отчетов о паролях Active Directory
Сброс пароля пользователя Active Directory
Теперь, когда мы узнали, как использовать Get-ADUser для проверки учетной записи пользователя, мы знаем, что результат действителен и что идентификатор пользователя существует. Теперь нам нужно использовать cmdlet Set-ADAccountPassword, чтобы сбросить пароль пользователя.
Команда Set-ADAccountPassword изменяет пароль пользователя, если мы предоставляем старый пароль. Если у нас нет старого пароля, то cmdlet сбрасывает его с помощью параметра Reset.
Новый случайно сгенерированный пароль – это 14-символьный случайный пароль с пятью не буквенно-цифровыми символами. Для выполнения откройте окно PowerShell, скопируйте код, вставьте его в PowerShell и нажмите Enter:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- Строка 1: Указывает имя пользователя, пароль которого требуется сбросить. Убедитесь, что заменили строку USERNAME фактическим идентификатором пользователя.
- Строка 2: Импортирует класс объекта сборки .NET System.Web.
- Строка 3: Генерирует случайный пароль, состоящий из 14 символов, включая пять неалфавитно-цифровых символов.
- Строка 4: Преобразует обычный текст пароля в защищенный объект строки пароля.
- Строка 5: Облегчает сброс пароля.
- Строка 6: Приказывает учетной записи AD изменить пароль при следующем входе в систему.
- Строка 7: Отображает новый пароль в консоли. Однако, в целях безопасности, мы не рекомендуем это. Строка 6 отвечает за смену пароля по желанию пользователя и считается наилучшей практикой для данной процедуры.
Улучшите безопасность вашей Active Directory и Azure AD
Попробуйте нас бесплатно, доступ ко всем функциям. – Доступно более 200 шаблонов отчетов AD. Легко настраивайте свои собственные отчеты AD.
Также читайте Попробуйте отчеты о паролях Office 365
Написание инструмента сброса пароля Active Directory
У нас теперь есть скрипт, который мы используем для сброса пароля пользователя. Следующим шагом является преобразование нашего скрипта в инструмент. Повторно используемый инструмент выполняет одни и те же действия с минимальным количеством ручных действий пользователя.
При создании инструмента одним из ключевых аспектов является то, что тот, кто запускает инструмент, не должен каждый раз редактировать код. К сожалению, наш код все еще требует, чтобы пользователь редактировал переменную $username.
Вместо того чтобы позволять пользователям нашего инструмента изменять значения вручную, почему бы не написать скрипт, который принимает параметры? Для этого выполните следующие шаги:
- Откройте Windows PowerShell ISE.
- Создайте новый файл PowerShell и сохраните файл под именем Reset-ADPassword.ps1. Сохраните скрипт в предпочитаемом месте. В этой статье файл сохраняется в папке C:\PS\scripts .
- Пожалуйста, скопируйте и вставьте код ниже в наш редактор скриптов перед сохранением скрипта.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- Строка 1: Добавляет параметр с названием имя пользователя.
- Строка 5: Проверяет, предоставлено ли значение имени пользователя. В если блоке также отображает сообщение и завершает работу скрипта, если условие выполнено.
- Строка 10: Проверяет, является ли имя пользователя действительным или нет.
- Строка 12: Проверяет, является ли имя пользователя недействительным. Отображает сообщение и прекращает выполнение скрипта.
- Строка 17: Генерирует случайный пароль длиной 14 символов с пятью неалфавитными символами.
- Строка 18: Преобразует обычный текст пароля в объект защищенного пароля.
- Строка 20: Облегчает сброс пароля.
- Строка 22: Налагает требование изменить пароль при следующем входе в систему.
- Строка 24: Отображает новый пароль в консоли. Однако мы не рекомендуем это для безопасности целей. Строка 6 будет заниматься изменением пароля по желанию пользователя и считается лучшей практикой для этой процедуры.
- Строка 28: Отображает сообщение об ошибке, если сброс не удался.
Также читайте Развернуть инструмент отчетности Active Directory
Примеры использования инструмента сброса пароля AD
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
Сброс пароля для одного пользователя
Предположим, нам нужно сбросить пароль одного пользователя. Во-первых, запустите инструмент сброса пароля Active Directory и укажите, какой имя пользователя нужно отметить. Например, чтобы сбросить пароль одного пользователя, запустите скрипт, как показано ниже:
.\Reset-ADPassword.ps1 -username USERNAME
В результате скрипт сбрасывает пароль и отображает его на экране. Например, этот вывод отправляет новый пароль затронутому пользователю:
Сброс пароля для нескольких пользователей
К счастью, мы можем проходить через список в PowerShell с использованием массивов и цикла foreach. Кроме того, команда ForEach-Object в PowerShell позволяет нам обрабатывать несколько элементов одновременно. Эта команда позволяет нам передавать различные элементы через конвейер.
Чтобы сбросить пароли нескольких пользователей, создайте массив с двумя или более именами пользователей. Элементы массива затем передаются через конвейер, где команда ForEach-Object PowerShell запускает инструмент сброса пароля на каждом имени пользователя.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Однако, если мы исправим более двух учетных записей пользователей, это улучшится. Помните текстовый файл, который мы сгенерировали ранее? Мы используем его в этом разделе.
Мы должны прочитать текстовый файл, содержащий учетные записи пользователей и запустить инструмент сброса пароля AD для каждой из них. Для этого используйте cmdlet Get-Content, чтобы импортировать содержимое текстового файла в PowerShell. После этого сценарий отправляет данные в конвейер и запускает сценарий сброса пароля AD для каждой учетной записи.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
После выполнения фрагмента выше мы сможем сбросить несколько паролей пользователей за один запуск.
Спасибо за прочтение статьи в блоге “Найти пользователей активной директории с истекшим сроком действия пароля (PowerShell)”. Мы заключим его сейчас.
Заключение по поиску пользователей AD с истекшим сроком действия паролей PowerShell.
В заключение, поиск пользователей Active Directory пользователи с истекшими паролями с использованием PowerShell является простым процессом, который экономит наше время и усилия. Используя команду Get-ADUser и фильтруя пользователей с истекшими паролями, вы можете быстро идентифицировать и нацеливать конкретных пользователей для сброса пароля или истечения срока действия уведомлений. Эта команда удобна для организаций с большим количеством пользователей, поскольку позволяет проактивно управлять истечением паролей и снижать риск сеCURITY нарушений.
Посетите наш раздел Active Directory на нашем блоге здесь, а также раздел PowerShell здесь, чтобы прочитать больше контента.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/