В этой статье мы рассмотрим, как изменить (сбросить) пароль одного или нескольких пользователей Active Directory с помощью графической оснастки Active Directory Users and Computers, из командной строки, а также с помощью PowerShell командлета Set-ADAccountPassword.
Изменить пароль пользователя домена из графической консоли Active Directory
Для сброса пароля пользователя Active Directory можно использовать графическую оснастку
dsa.msc
(Active Directory Users & Computers — ADUC). Воспользуйтесь поиском в консоли ADUC и найдите учетную запись пользователя, которому нужно изменить пароль. Щелкните по нему правой кнопкой и выберите пункт “Смена пароля” (Reset password).
Укажите новый пароль (дважды). Здесь можно включить две опции:
- User must change password at next logon – если вы хотите, чтобы пользователь сам задал себе новый пароль при следующем входе;
- Unlock user’s account – включите эту опцию, если вы хотите разблокировать пользователя (если учетная запись заблокирована политикой безопасности AD из-за многократных попыток входа с неверным паролем).
Это самый просто и интуитивно понятный способ сброса пароля пользователя домена.
Также в свойствах пользователя на вкладке редактора атрибутов AD вы можете найти информацию о дате последней смены пароля. Это значение хранится в атрибуте пользователя pwdLastSet.
Для сброса пароля ваша учетной запись должна обладать соответствующими правами. По-умолчанию обычные пользователи AD не могут сбросить пароль других аккаунтов. Такие права есть только у учетных записей с правами администратора домена (Domain Admins), или Account Operators. Вы можете предоставить другим группам пользователям право на сброс паролей в определенных OU с помощью делегирования. По ссылке доступен пример делегирования прав на сброс паролей и разблокировку пользователей группе HelpDesk.
Чтобы проверить, что у вашей учетной записи есть право на сброс пароля определенного пользователя, откройте его свойства, перейдите на вкладку Security -> Advanced -> Effective Access -> укажите имя своей учетной записи -> убедитесь, что у вас есть разрешение Reset Password.
Как сбросить пароль пользователю Active Directory с помощью PowerShell?
Вы можете использовать команды PowerShell для сброса пароля пользователя в AD. Для этого можно использовать используется командлет Set-ADAccountPassword, входящий в модуль Active Directory для Windows PowerShell (в десктопых версиях Windows он входит в состав RSAT, а в серверных редакциях устанавливается в виде отдельного компонента AD DS Snap-Ins and Command-Line Tools). Перед использованием модуля его необходимо импортировать в сессию PowerShell:
Import-module ActiveDirectory
Чтобы сбросить пароль для пользователя dakimov и установить новый пароль SuperStr0n@p1, выполните команду:
Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “SuperStr0n@p1” -Force -Verbose) –PassThru
alert]Для автоматической генерации сложный паролей пользователям вы можете использовать метод GeneratePassword, описанный в статье Генерация случайных паролей с помощью PowerShell. [/alert]
По умолчанию командлет возвращает объект и ничего не отображает в консоли. Чтобы вывести информацию об объекте пользователя в 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.
Это означает что, новый пароль не соответствует требования сложности, длины и т.д., заданным в доменной политике паролей или гранулированной политике паролей, действующей на учетную запись пользователя.
Результирующие настройки парольной политики пользователя в домене можно вывести так:
Get-ADUserResultantPasswordPolicy -Identity a.novak
Если у вас включено ведение истории PowerShell команд, и вы не хотите, чтобы пароли в открытом виде сохранялись в сессии PoSh, пароль как и при создании пользователя нужно преобразовать в безопасную строку (подробнее о защите паролей в скриптах PowerShell здесь):
$NewPasswd=Read-Host "Введите новый пароль пользователя" –AsSecureString
Теперь можно задать новый пароль пользователю:
Set-ADAccountPassword dakimov -Reset –NewPassword $NewPasswd –PassThru
При сбросе пароля можно принудительно снять блокировку ученой записи, если она была заблокирована ранее (как найти с какого компьютера блокируется учетная запись, смотрите в статье Поиск источника блокировки пользователя в Active Directory):
Unlock-ADAccount –Identity dakimov
Чтобы пользователь при следующем входе в домен самостоятельно сменил данный пароль на новый, нужно изменить его свойства в AD, выполнив команду:
Set-ADUser -Identity dakimov -ChangePasswordAtLogon $true
Вы можете совместить в одной строке команду смены пароля и включение требования сменить пароль (атрибут userAccountControl):
Set-ADAccountPassword dakimov -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True
С помощью командлета Get-ADUser вы можете убедиться, что пароль сброшен успешно. Выведите время последней смены пароля аккаунта:
Get-ADUser dakimov -Properties * | select name, pass*
При сбросе пароля на контроллере домена (DC) регистрируется событие EventID 4724. Это событие помогает определить учетную запись, которая выполнила сброс пароля пользователя.
Get-ADUser -Identity avivanov -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}
PowerShell скрипт для сброса пароля нескольких пользователей AD
Выше мы показали, как из PowerShell сбросить пароль одного пользователя в AD. Рассмотрим теперь другой сценарий – когда вам нужно сменить пароли сразу нескольких пользователей.
Например, вы хотите сбросить пароль всем сотрудникам департамента Sales на одинаковый и заставить сменить его при следующем входе. Вы можете использовать параметр –Filter для выбора пользователей с определенным значением в одном из атрибутов:
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.
Можно ли изменить пароль учетной записи компьютера (не сбросить, а установить свой)?
Не совсем понимаю зачем это вам нужно, но думаю поможет такой 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 '[email protected]' `
-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)}