用PowerShell生成强随机密码
在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密码复杂性策略的密码。