用PowerShell生成强随机密码

时间:2020-01-09 10:46:26  来源:igfitidea点击:

在Active Directory中创建新的用户帐户时,管理员会为每个帐户设置唯一的初始密码,并将其告知用户(通常在首次登录时,AD userAccountControl属性的选项“user must change password at next logon”提示用户更改此密码)。如果我们不想为每个用户创建新的随机密码,或者我们正在使用PowerShell脚本创建AD帐户,则可以使用简单的PowerShell脚本自动生成唯一的密码。

要生成密码,可以使用.net的 System.Web.Security.Membership类。让我们使用以下PowerShell命令生成一个强随机密码:

# Import System.Web assembly
Add-Type -AssemblyName System.Web
# Generate random password
[System.Web.Security.Membership**::GeneratePassword(8,2)

GeneratePassword方法允许生成最多128个字符的密码。该方法使用两个初始参数:密码长度(在我的例子中是 8个字符)和非字母或者非数字特殊字符的最小数量,例如

!, -, $, &, @, #, %, etc

( 2特殊字符)。如我们所见,根据这些参数,为我生成了以下密码:

QX.9ogy:

不建议在一个用户密码中使用超过一个或者两个特殊字符,否则用户将无法无错误地键入密码(例如

k};E^**$|

).

因此,如果使用new ADUser PowerShell cmdlet创建新用户并希望为其设置唯一密码,请使用以下命令:

Add-Type -AssemblyName System.Web
New-ADUser -Name "Jeremy Irons" -GivenName "Jeremy" -Surname "Irons" -SamAccountName "jirons" -UserPrincipalName "[email protected]" -Path "OU=Users,OU=Glasgow,OU=UK,DC=theitroad,DC=com" –AccountPassword ([System.Web.Security.Membership**::GeneratePassword(8,2)) -ChangePasswordAtLogon $true -Enabled $true

此外,还可以使用GeneratePassword方法重置Active Directory用户密码。

如果公司使用的是强密码策略,在某些情况下,使用GeneratePassword方法生成的密码可能不符合AD域密码策略的要求。在为用户设置密码之前,我们可以确保它符合密码复杂性策略。当然,检查密码的长度和用户名是否存在是没有意义的。我们可以检查密码是否满足“ 密码必须满足复杂性要求”策略的至少3个要求(密码必须包含以下列表中至少3种类型的字符:数字小写字符、大写字符和特殊字符)。如果密码检查失败,则必须重新生成它。

如果一个新的密码符合PowerShell的随机要求,我会生成一个新的密码:

Function GenerateStrongPassword ([Parameter(Mandatory=$true)**[int**$PasswordLenght)
{
Add-Type -AssemblyName System.Web
$PassComplexCheck = $false
do {
$newPassword=[System.Web.Security.Membership**::GeneratePassword($PasswordLenght,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**")
)
{
$PassComplexCheck=$True
}
} While ($PassComplexCheck -eq $false)
return $newPassword
}

要生成包含5个字符和至少一个特殊字符的密码,请运行以下命令:

GenerateStrongPassword (5)

此脚本将始终创建符合AD密码复杂性策略的密码。