Генерація випадкових паролів за допомогою PowerShell

При створенні облікових записів користувачів в Active Directory адміністратор зазвичай задає кожного облікового запису унікальний початковий пароль, який потім повідомляється користувачеві (зазвичай при першому вході у користувача потрібно змінити цей пароль за допомогою опції "User must change password at next logon" атрибута AD userAccountControl). Оскільки вам не хочеться кожен раз вигадувати новий випадковий пароль користувачам, або ви використовуєте PowerShell скрипт для закладу облікових хзапісей в AD, ви можете автоматизувати генерацію унікальний паролів користувачів за допомогою PowerShell.

Для генерації пароля можна скористатися методом GeneratePassword з .Net класу System.Web.Security.Membership. Згенеруємо складний пароль командами:

Add-Type -AssemblyName System.Web
[System.Web.Security.Membership] :: GeneratePassword (10,2)

Метод GeneratePassword дозволяється генерувати пароль довжиною до 128 символів. Метод приймає на вхід два параметра - довжина пароля (в моєму випадку 10 символів) і мінімальне кількість не буквено-цифрових спецсимволов, таких як!, -, $, &, @, #,% і т.д. (2 спецсимволи). Як ви бачите, в моєму випадку був згенерований пароль tm-qZl! uQv згідно із заданими аргументів.

Небажано використовувати в паролі більше одного-двох спец символів, інакше набрати такий пароль _ ! $. R% 2 * [ користувачеві буде нереально.

Таким чином при закладі нових користувачів за допомогою командлета PowerShell New-ADUser з унікальним паролем можна використовувати наступними командами:

Add-Type -AssemblyName System.Web
New-ADUser -Name "Anton Semenov" -GivenName "Semenov" -Surname "Anton" -SamAccountName "asemenov" -UserPrincipalName "[email protected]" -Path "OU = Users, OU = MSK, DC = winitpro, DC = ru "-AccountPassword ([System.Web.Security.Membership] :: GeneratePassword (10,2)) -Enabled $ true

Також ви можете використовувати метод GeneratePassword при скиданні пароля користувачів Active Directory.

Якщо у вашій організації використовуються жорсткі політики паролів, в деяких випадках пароль, згенерований методом GeneratePassword може не відповідати вимогам вашої доменної пральний політиці. Перед тим, як призначити пароль користувачу ви можете перевірити, що він відповідає політикам складності пароля. Природно, перевіряти його на довжину і відсутності логіна користувача в паролі сенсу немає. Ви можете перевірити, що складність пароля відповідає як мінімум 3 вимогам політики Password must meet complexity requirements (Пароль повинен містити 3 типи символів зі списку: цифри, символи в нижньому регістрі, символи в верхньому регістрі і спецсимволи). Якщо пароль не пройшов перевірку, потрібно згенерувати його ще раз.

У мене вийшла така PowerShell функція, яка генерує новий пароль і перевіряє його на відповідність вимогам складності:

Function Generate-Complex-Domain-Password ([Parameter (Mandatory = $ true)] [int] $ PassLenght)

Add-Type -AssemblyName System.Web
$ RequirementsPassed = $ false
do
$ NewPassword = [System.Web.Security.Membership] :: GeneratePassword ($ PassLenght, 1)
If (($ newPassword -cmatch "[A-Z \ p Lu \ s]") '
-and ($ newPassword -cmatch "[a-z \ p Ll \ s]") '
-and ($ newPassword -match "[\ d]") '
-and ($ newPassword -match "[^ \ w]")
)

$ RequirementsPassed = $ True

While ($ requirementsPassed -eq $ false)
return $ newPassword

Для генерації пароля з 4 символів з мінімум одним спецсимволи виконайте команду:

Generate-Complex-Domain-Password (4)

Даний скрипт на виході завжди буде видавати пароль, який відповідає критеріям складності домену.