Массовый сброс паролей в Active Directory через PowerShell: гайд
Задача массовой смены паролей в AD
При плановой смене регламентов безопасности, подозрении на компрометацию учетных записей или приеме на работу группы сотрудников администратору требуется сбросить пароли сразу десяткам или сотням пользователей в Active Directory. Вручную менять пароль в графической оснастке dsa.msc для каждого аккаунта слишком долго.
Требования к операции:
- Установка единого временного безопасного пароля (например,
TempPass2025!). - Обязательное включение флага «Требовать смену пароля при следующем входе в систему» (Change password at next logon).
- Автоматическая разблокировка учетных записей при необходимости.
Пошаговый скрипт PowerShell для массового сброса
Для выполнения задачи используется стандартный модуль ActiveDirectory на контроллере домена или рабочем месте с установленным RSAT.
Шаг 1. Сброс паролей для всех пользователей конкретного подразделения (OU)
Запустите консоль PowerShell от имени Администратора и выполните следующий готовый скрипт (замените путь OU и домен на свои):
# Задаем временный пароль в виде защищенной строки:
$TempPassword = ConvertTo-SecureString "Welcome2025!" -AsPlainText -Force
# Указываем целевое подразделение (OU):
$TargetOU = "OU=Sales,OU=Users,DC=company,DC=local"
# Получаем всех пользователей и меняем пароли:
Get-ADUser -Filter * -SearchBase $TargetOU | ForEach-Object {
Set-ADAccountPassword -Identity $_.SamAccountName -NewPassword $TempPassword -Reset
Set-ADUser -Identity $_.SamAccountName -ChangePasswordAtLogon $true
Unlock-ADAccount -Identity $_.SamAccountName
Write-Host "Пароль успешно сброшен для: $($_.SamAccountName)" -ForegroundColor Green
}Шаг 2. Массовый сброс по списку из файла CSV
Если пользователи находятся в разных папках, создайте текстовый файл users.csv со списком логинов в колонке Username:
Import-Csv -Path "C:\scripts\users.csv" | ForEach-Object {
$SecurePass = ConvertTo-SecureString "NewPass2025!" -AsPlainText -Force
Set-ADAccountPassword -Identity $_.Username -NewPassword $SecurePass -Reset
Set-ADUser -Identity $_.Username -ChangePasswordAtLogon $true
Write-Host "Готово для $($_.Username)" -ForegroundColor Cyan
} Частые вопросы (FAQ)
Что делать, если при выполнении скрипта возникает ошибка сложности пароля?
Временный пароль в скрипте должен полностью соответствовать действующей политике домена: содержать строчные и заглавные буквы, цифры, спецсимволы и иметь минимальную длину (обычно от 8 символов).
Как принудительно завершить активные сессии пользователей после смены пароля?
Смена пароля в Kerberos не сбрасывает существующий билет TGT мгновенно. Пользователь продолжит работать, пока билет не истечет (по умолчанию 10 часов) или пока он не заблокирует экран.
Как запустить скрипт, если модуль ActiveDirectory не найден?
Установите компоненты администрирования RSAT командой: Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0.
Можно ли сгенерировать уникальный случайный пароль для каждого пользователя?
Да, можно дописать генератор строк через System.Web.Security.Membership::GeneratePassword и сохранять результаты в файл отчета.