При создании учетных записей пользователей в 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)
Данный скрипт на выходе всегда будет выдавать пароль, соответствующий критериям сложности домена.