Доменные пользователи могут самостоятельно изменить свой пароль после входа в систему через меню Windows Security, или на экране входа в Windows, если срок действия пароля пользователя истек. Если же пользователь забыл свой пароль, или его аккаунт был скомпрометирован, сбросить (изменить) пароль пользователя может администратор домена или член группы Account Operators. В этой сатье мы рассмотрим основные инструменты, которую позволяют сбросить пароль пользователя Active Directory.
Изменить пароль пользователя домена из графической консоли Active Directory
Для сброса паролей пользователей домена можно использовать графическую оснастку Active Directory Users & Computers (ADUC). Это самый простой и интуитивно понятный инструмент для принудительной смены пароля доменного пользователя.
- Откройте оснастку
dsa.msc
- Воспользуйтесь поиском в консоли ADUC и найдите учетную запись пользователя, которому нужно изменить пароль.
- Щелкните по аккаунту правой кнопкой и выберите пункт Смена пароля (Reset password) .
Задайте новый пароль (дважды). Здесь можно включить две опции:
- User must change password at next logon – если вы хотите, чтобы пользователь сам задал себе новый пароль при следующем входе;
- Unlock user’s account – включите эту опцию, если вы хотите разблокировать пользователя (используется учетная запись заблокирована политикой безопасности AD из-за многократных попыток входа с неверным паролем. Подробнее про поиск источника блокировки пользователя в Active Directory).
В свойствах пользователя на вкладке редактора атрибутов AD вы можете найти информацию о дате последней смены пароля. Это значение хранится в атрибуте пользователя pwdLastSet.
Для сброса пароля ваша учетной запись должна обладать соответствующими правами. По-умолчанию обычные пользователи AD не могут сбросить пароль других аккаунтов. Такие права есть только у учетных записей с правами администратора домена (Domain Admins), или Account Operators. Вы можете предоставить другим группам пользователям право на сброс паролей в определенных OU с помощью делегирования. По ссылке доступен пример делегирования прав на сброс паролей и разблокировку пользователей группе HelpDesk.
Чтобы проверить, что у вашей учетной записи есть право на сброс пароля определенного пользователя, откройте его свойства в консоли ADUC, перейдите на вкладку Security -> Advanced -> Effective Access -> укажите имя своей учетной записи -> убедитесь, что у вас есть разрешение Reset Password.
Сброс пароля пользователя Active Directory с помощью PowerShell
Для сброса пароля доменного пользователя можно использовать PowerShell команды Set-ADAccountPassword. Для использования этой команды на компьютере должен быть установлен модуль Active Directory для Windows PowerShell (в десктопых версиях Windows он входит в состав RSAT, а в серверных редакциях устанавливается в виде отдельного компонента AD DS Snap-Ins and Command-Line Tools).
Чтобы сбросить пароль для пользователя dakimov и установить новый пароль SuperStr0n@p1, выполните команду:
Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "SuperStr0n@p1" -Force -Verbose) –PassThru
По умолчанию командлет возвращает объект и ничего не отображает в консоли. Чтобы вывести информацию об объекте пользователя в AD мы добавили параметр -PassThru.
В качестве имени пользователя можно указать sAMAccountName (как в нашем случае), objectGUID, SID пользователя, или его DN (Distinguished Name, например
CN=Akimov,OU=Users,DC=winitpro,DC=ru
).
Если при смене пароля пользователя не указывать параметр -Reset, придется сначала ввести старый учетной записи.
Set-ADAccountPassword : The password does not meet the length, complexity, or history requirement of the domain.
Если у вас включено ведение истории PowerShell команд, и вы не хотите, чтобы пароли в открытом виде сохранялись в сессии PoSh, пароль как и при создании пользователя нужно преобразовать в безопасную строку (подробнее о защите паролей в скриптах PowerShell здесь):
$NewPasswd=Read-Host "Введите новый пароль пользователя" –AsSecureString
Теперь можно задать новый пароль пользователю:
Set-ADAccountPassword dakimov -Reset –NewPassword $NewPasswd –PassThru
Несколько дополнительных полезных команд, которые часто используются при сбросе пароля:
- Принудительно разблокировать пользователя в AD:
Unlock-ADAccount –Identity dakimov
- Потребовать от пользователя сменить заданный ему временный пароль при следующем входе (включить атрибут userAccountControl ChangePasswordAtLogon):
Set-ADUser -Identity dakimov -ChangePasswordAtLogon $true
Убедитесь, что пароль пользователя был изменен, выведя с помощью Get-ADUser время последней смены пароля:
Get-ADUser dakimov -Properties * | select name, pass*
Get-ADUser -Identity dakimov -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
Продлить срок действия текущего пароля в домене можно так.
PowerShell скрипт для сброса пароля нескольких пользователей в AD
Иногда администратору нужно одновременно сменить/сбросить пароль сразу нескольким доменным пользователем.
Например, следующая команда установит одинаковый пароль все сотрудникам департамента Sales и включит требование сменить пароль при входе:
get-aduser -filter "department -eq 'Sales Dept' -AND enabled -eq 'True'" | Set-ADAccountPassword -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
Можно реализовать другой сценарий. Допустим, у вас есть CSV/Excel файл, в котором содержится список пользователей, которым нужно сбросить пароли и уникальный пароль для каждого пользователя. Формат файла users.csv:
sAMAccountName;NewPassword aivanov;PaSSde0r1 bpetrov;New$isde01 ssidorov;k@nndj!223
С помощью следующего скрипта PowerShell можно импортировать список пользователей из CSV файла и сбросить пароль для каждого.
Import-Csv users.csv -Delimiter ";" | Foreach {
$NewPass = ConvertTo-SecureString -AsPlainText $_.NewPassword -Force
Set-ADAccountPassword -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $false
}
После выполнения данного кода всем пользователям в файле будет установлен новый уникальный пароль.
Изменить пароль пользователя в домене из командной строки
Если на компьютере не установлена консоль ADUC, или модуль RSAT-AD-PowerShell, вы можете использовать консольную команду net use для сброса пароля. Выведите информацию об учетной записи пользователя в домене:
net user a.novak /domain
Password last set 4/20/2022 2:10:05 AM Password expires Never Password changeable 4/21/2022 2:10:05 AM Password required Yes User may change password Yes Last logon 4/20/2022 2:58:47 AM Logon hours allowed All
Здесь видно когда последний раз менялся пароль и дата последнего входа пользователя в домен (как получить историю входа пользователя в домен).
Чтобы сбросит пароль этого пользователя, выполните команду:
net user a.novak /domain *
Укажите новый пароль и подтвердите его:
Type a password for the user: xx Retype the password to confirm: xx The command completed successfully.
Кто сбросил пароль пользователя в AD?
Если вам нужно определить, кто именно из администраторов сбросил пароль определенного пользователя, нужно включить аудит событий учетных записей в групповых политиках домена.
- Откройте консоль управления доменными GPO (
gpedit.msc
) - Откройте Default Domain Controller Policy и перейдите в раздел Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy
- Включите политику Audit User Account Management (Define these policy settings: Success)
- После обновления настроек групповых политик на контроллере домена в журнале событий Event Viewer будут логироваться события сброса паролей
- Откройте консоль eventvwr.msc и включите фильтр для журнала Security по событию с Event ID 4724 (пароль был сброшен администратором) и 4723 (пользователь самостоятельно изменил свой пароль)
- В описании события An attempt was made to reset an account’s password будет указано какому пользователю был сброшен пароль (Target Account)и кто из администраторов его изменил (Subject). Чтобы увеличить количество последних событий, которые будут хранится в журнале на DC, нужно увеличить размер журналов Event Viewer.
С помощью PowerShell можно выбрать все события смены пароля. В таблице будет указано имя администратора и пользователя, чей пароль был сброшен:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4724} | ForEach-Object {
$xml = [xml]$_.ToXml()
$data = $xml.Event.EventData.Data
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
SubjectUser = ($data | Where-Object Name -eq 'SubjectUserName').'#text'
SubjectDomain = ($data | Where-Object Name -eq 'SubjectDomainName').'#text'
TargetUser = ($data | Where-Object Name -eq 'TargetUserName').'#text'
TargetDomain = ($data | Where-Object Name -eq 'TargetDomainName').'#text'
}
} | Select TimeCreated, @{n='Subject';e={"$($_.SubjectDomain)\$($_.SubjectUser)"}}, @{n='Target';e={"$($_.TargetDomain)\$($_.TargetUser)"}}
Можно ли изменить пароль учетной записи компьютера (не сбросить, а установить свой)?
Не совсем понимаю зачем это вам нужно, но думаю поможет такой VBS скрипт
Dim objComputer
Set objComputer = GetObject("LDAP://CN=computername,DC=domain,DC=COM")
objComputer.SetPassword "computername$"
Wscript.Quit
_https://support.microsoft.com/en-us/help/216393/resetting-computer-accounts-in-windows
Помогите пожалуйста, не могу отфильтровать смену паролей пользователей по OU,.пробую с
Get-ADUser -SearchBase «OU=Moscow,DC=domain,DC=local» не выходит
Не понял точно, что вам нужно. Предполагаю, что нужно вывести аккаунты, отсортированные по дате смены пароля. Попробуйте такой PoSh код:
Get-ADUser -filter * -SearchBase "OU=MSK,DC=domain,DC=loc" -properties *| select sAMAccountName, PasswordLastSet| sort PasswordLastSet -Descending
Нет, все намного проще, нужно сменить пароли всех пользователей на одинаковые в определенной OU
Вот так попробуйте:
Get-ADUser -filter * -SearchBase "OU=MSK,DC=domain,DC=loc" | Set-ADAccountPassword -Reset -NewPasword (Read-Host -Prompt "Новый пароль" -AsSecureString)
Set-ADAccountPassword : Не удается найти параметр, соответствующий имени параметра «NewPasword».
Get-ADUser -filter * -SearchBase «CN=*,OU=*,OU=St44,DC=*,DC=*» | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText -String ‘*****’ -force) –PassThru — вот это сработало. ‘*****’ — не кавычки, а апостроф.
Спасибо тебе winItpro !
Get-ADUser -filter {passwordexpired -eq $True} | Set-ADAccountPassword -NewPassword $623326 -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
Подскажи где я ошибся? фильтрую по пользователям у которых срок действия истек и хочу Установить при входе им пароль 623326 и заставить их сменить его при входе
Почему то фильтр
{passwordexpired -eq $True}
работает некорректно (хотяpasswordexpired -eq $False
— ок), наверно лучше заменить на:$623326 = "newpass123"
Get-Aduser -Properties * | where {$_.PasswordExpired -eq $true}| Set-ADAccountPassword -NewPassword $623326 -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
А можно сделать массовую смену пароля (всем разный) в определённой OU, и что бы каждому пользователю отправилось ссобщение с его новым паролем, ящики забиты в учётках и одно сводное сообщение админу (это не обязательно).
Скриптом PowerShell, он не слишком сложный:
Нужно использовать:
Get-ADuser для получения списка пользователей из OU) https://winitpro.ru/index.php/2015/05/21/powershell-get-aduser-poluchenie-dannih-o-polzovatelyax-active-directory/
Затем по списку цикл foreach:
Генерация пароля (https://winitpro.ru/index.php/2019/07/04/generaciya-slozhnogo-parolya-iz-powershell/)
Установка нового пароля Set-ADAccountPassword
Send-MailMessage — рассылка писем https://winitpro.ru/index.php/2011/03/30/otpravka-pochty-iz-powershell/
Здравствуйте! Можете если, если не сложно, выложить такой скрипт? уже неделю бьюсь над ним, но никак не получает(
Это мой первый опят в создании powershell скриптов и похоже что-то я не улавливаю!
Спасибо!
Собственно скрипт можно прямо по ссылкам которые я оставил собрать. Вот костяк скрипта.
Скрип сырой, но думаю доведете до ума
Add-Type -AssemblyName System.Web
$ADusers=Get-ADUser -Filter {.................} -Properties *
foreach ($ADuser in $ADusers) {
$newpass=[System.Web.Security.Membership]::GeneratePassword(10,2)
Set-ADAccountPassword $ADuser -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $newpas -Force -Verbose) –PassThru
Send-MailMessage `
-SmtpServer smtp.winitpro.ru `
-To $ADuser.mail
-From 'admin@winitpro.ru' `
-Subject "test" `
-Body "you new password $newpass " `
-Encoding 'UTF8'
}
Подскажи пожалуйста, а как можно внедрить read-host чтобы писать логин пользователя а еще лучше Имя Фамилия. и затем уже писать пароль для этой учетной записи?
$username=read-host -Prompt "Enter Username"
$password=read-host -Prompt "Enter new password"
Set-ADAccountPassword $username -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $password -Force -Verbose) –PassThru
Друг вот это что такое: NewPassword (ConvertTo-SecureString -AsPlainText “SuperStr0n@p1” -Force -Verbose) –PassThru ?????????????????????????????????????
Команда задает пароль, преобразуюя его из plaintext в формат secure string.
Какой именно оператор вызывает вопрос?
За что отвечает параметр -Reset в данной строке?
Set-ADAccountPassword -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru
Говорит, что пароль именно сбрасывается (старый пароль не знаем). Новый пароль задается в NewPassword .
Как сменить пароли всех пользователей в домене не по логину, а по атрибуту emploeeNumber?
У пользователей ведь должен быть уникальный emploeeNumber?
У одного пользователя можно так:
Get-ADUser -Filter {(emploeeNumber -eq $value)| Set-ADUser -ChangePasswordAtLogon $true
Здравствуйте! При запуске скрипта смены пароля нескольких пользователей из CSV выводятся ошибки.
Имя «Set-ADAccountPassword» не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
+ Set-ADAccountPassword <<<< -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $false
+ CategoryInfo : ObjectNotFound: (Set-ADAccountPassword:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
ConvertTo-SecureString : Не удается привязать аргумента к параметру "String", так как он имеет значение NULL.
+ $NewPass = ConvertTo-SecureString <<<< -AsPlainText $_.NewPassword -Force
+ CategoryInfo : InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
Имя "Set-ADAccountPassword" не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
+ Set-ADAccountPassword <<<< -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $false
+ CategoryInfo : ObjectNotFound: (Set-ADAccountPassword:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Похоже что у вас не установлен модуль Active Directory для Windows PowerShell (https://winitpro.ru/index.php/2019/07/18/modul-active-directory-dlya-powershell/)
или вы используете pwsh.exe вместо powershell.exe
Для работы модуля Set-ADAccountPassword нужен свой модуль, он не входит в комплект модуля Active Directory
Import-Csv users.csv -Delimiter «;» | Foreach {
$NewPass = ConvertTo-SecureString -AsPlainText $_.NewPassword -Force
Set-ADAccountPassword -Identity $_.sAMAccountName -NewPassword $NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $false
}
Вбил одного пользователя себя в csv,скрипт применяется,а пароль остался тем же!
Помогите разобраться мб я не правильно внес логин пароль у меня вида «ivanov;QWErty123%»
Вбил одного пользователя себя в csv,скрипт применяется,а пароль остался тем же!
Помогите разобраться мб я не правильно внес логин пароль у меня вида «ivanov;QWErty123%»
Сам разобрался там должно быть sAMAccountName;NewPassword в первой ячейке
sAMAccountName;NewPassword должно быть в ячейке
можно ли увидеть пароль администратора Windows Server
Как сменить пароль контакта AD ?
Откуда у него пароль взялся? это не полноценный аккаунт.
Или тут что-то другое подразумевается?
Подскажите как вывести всех пользователей у кого стоит галочка смена пароля при первом входе ?
Get-ADUser -Properties PasswordNotRequired,PasswordLastSet -Filter {(PasswordLastSet -eq '0') -and (PasswordNotRequired -eq $false)}