Зміна пароля користувача в AD з PowerShell

У цій статті ми розглянемо, як змінити (скинути) пароль одного або відразу декількох користувачів Active Directory з командного рядка PowerShell за допомогою командлета Set-ADAccountPassword.

Більшість адміністраторів звикли виконувати зміну (скидання) паролів користувачів в AD через графічну оснащення dsa.msc (Active Directory Users & Computers - ADUC). Для цього потрібно знайти обліковий запис користувача в AD клацнути по ньому правою кнопкою і вибрати пункт "Зміна пароля" (Reset password). Це простий і зрозумілий спосіб.

Але вам не вдасться використовувати консоль ADUC, коли необхідно скинути пароль відразу безлічі користувачів, використовувати процедуру скидання пароля в якості одного з дій скрипта. В цьому випадку можна скинути паролі в AD з командного рядка PowerShell.

зміст:

  • Як скинути пароль користувачу в AD?
  • Змінити пароль кількох користувачів в AD

Як скинути пароль користувачу в AD?

Для скидання пароля користувача в AD використовується командлет Set-ADAccountPassword, що входить в модуль Active Directory для Windows PowerShell (в десктоп версіях Windows він входить до складу RSAT, а в серверних редакціях встановлюється у вигляді окремого компонента AD DS Snap-Ins and Command-Line Tools). Перед використанням модуля його необхідно імпортувати в сесію PowerShell:

Import-module ActiveDirectory

Для скидання пароля ваша облікової запис повинен мати відповідні права. Природно, звичайні користувачі AD за замовчуванням не можуть скинути пароль інших акаунтів, щоб ця можливість з'явилася, користувачеві (групі користувачів) потрібно делегувати право на скидання пароля на контейнер AD, або додати його в доменну групу Account Operators.

Щоб перевірити, що у вашого профілю є право на скидання пароля певного користувача, відкрийте його властивості, перейдіть на вкладку Security -> Advanced -> Effective Access -> вкажіть ім'я свого облікового запису -> переконайтеся, що у вас є дозвіл Reset Password.

Щоб скинути пароль для користувача з обліковим записом dakimov і встановити новий пароль SuperStr0n @ p1, виконайте команду:

Set-ADAccountPassword dakimov -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "SuperStr0n @ p1" -Force -Verbose) -PassThru

Для автоматичної генерації складний паролів користувачам ви можете використовувати метод GeneratePassword, описаний в статті «Генерація випадкових паролів за допомогою PowerShell«.

За замовчуванням командлет повертає об'єкт і нічого не відображає в консолі. Щоб вивести інформацію про об'єкт користувача в AD ми використовуємо параметр -PassThru.

Як ім'я користувача можна вказати sAMAccountName (як в нашому випадку), objectGUID, SID користувача, або його DN (Distinguished Name, наприклад CN = Akimov, OU-Users, DC = winitpro, DC = ru).

Якщо при зміні пароля користувача не вказувати параметр -Reset, необхідно вказати старий і новий пароль облікового запису.

Примітка. Якщо при скиданні пароля за допомогою командлета Set-ADAccountPassword з'являється помилка:

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

При скиданні пароля можна примусово зняти блокування наукового записи, навіть якщо вона заблокована (як знайти з якого комп'ютера блокується обліковий запис, дивіться в статті Пошук джерела блокування користувача в Active Directory):

Unlock-ADAccount -Identity dakimov

Щоб користувач при наступному вході в домен змінив даний пароль на новий, виконайте команду:

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. Ця подія допомагає визначити обліковий запис, який виконала скидання пароля користувача.

Змінити пароль кількох користувачів в AD

Вище ми показали, як з 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 скрипта можна скинути пароль для кожного облікового запису з файлу:

Import-Csv users.csv -Delimiter ";" | Foreach
$ NewPass = ConvertTo-SecureString -AsPlainText $ _. NewPassword -Force
Set-ADAccountPassword -Identity $ _. SAMAccountName -NewPassword $ NewPass -Reset -PassThru | Set-ADUser -ChangePasswordAtLogon $ false

Після виконання даннго коду всім користувачам в файлі буде встановлений новий унікальний пароль.