如何使用PowerShell在Active Directory中重置用户密码?

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

在本文中,请仔细考虑如何使用PowerShell cmdlet Set-ADAccountPassword更改(或者重置)用户Active Directory密码。

大多数管理员通常通过图形化管理单元dsa.msc(Active Directory用户和计算机)更改(重置)AD用户密码。为此,我们必须运行ADUC控制台,在AD域中搜索用户帐户,右键单击该帐户,然后选择"重置密码"。这是重置当前所选用户密码的简单明了的方法。

但是我们将无法使用ADUC控制台来重置多个用户的密码,或者将重置密码过程用作自动化脚本操作之一。在这种情况下,我们可以使用PowerShell命令提示符重置AD密码。

使用Set-ADAccountPassword重置Active Directory中的用户密码

要在AD中重置用户密码,将使用Set-ADAccountPasswordcmdlet,它是Windows PowerShell Active Directory模块的一部分(在台式机Windows版本中,它是RSAT的一部分,在服务器版本中,其安装为AD DS管理单元和命令行工具的单独组件)。使用AD cmdlet之前,必须将其导入PowerShell会话

Import-module ActiveDirectory

要重置用户密码,帐户必须在AD域中具有相应的特权。当然,默认情况下,非管理员AD用户无法重置其他帐户的密码。若要允许一个用户或者一组用户重置其他用户的密码,必须委派权限以重置AD容器(组织单位)上的密码或者将帐户添加到内置域组"帐户操作员"中。

要验证帐户是否有权重置特定AD用户的密码,请打开其属性,然后转到"安全"标签->"高级"->"有效访问"->指定帐户名->确保我们具有重置密码权限。

要重置用户jliebert的密码并设置新密码mima123456,请运行以下命令:

Set-ADAccountPassword jliebert -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “mima123456” -Force -Verbose) –PassThru

默认情况下,该cmdlet返回该对象,并且在控制台中不显示任何内容。为了在AD中显示有关用户对象的信息,我们使用PassThru参数。

我们可以指定sAMAccountName(如本例所示),objectGUID,用户SID或者DN(专有名称,例如CN = jliebert,OU = Users,DC = theitroad,DC = com)作为用户名。

如果在更改用户密码时未指定"重置"参数,则必须手动输入新旧帐户密码。

注意使用Set-ADAccountPassword cmdlet重置密码时,我们会看到以下错误:

设置ADAccountPassword:密码不符合域的长度、复杂性或历史记录要求。
Set-ADAccountPassword: The password does not meet the length, complexity, or history requirement of the domain.

这意味着用户密码具有帐户所遵循的域密码策略或者细粒度密码策略中定义的某些复杂性,长度等要求。

如果你有PowerShell命令历史记录启用,你不想显示在豪华控制台明文密码,必须将密码转换为安全字符串(你可以阅读更多关于PowerShell脚本这里密码保护)的方法一样创建新的用户帐户时:

$NewPasswd=Read-Host "Enter a new user password" –AsSecureString

现在重置密码:

Set-ADAccountPassword jliebert -Reset –NewPassword $NewPasswd –PassThru

重置密码时,即使帐户已锁定,也可以强制对其进行解锁(有关如何查找锁定该帐户的计算机,请阅读文章"识别Active Directory中的帐户锁定的来源"):

Unlock-ADAccount –Identity jliebert

为了使用户在下次登录域时更改密码,请运行以下命令:

Set-ADUser -Identity jliebert -ChangePasswordAtLogon $true

我们可以将密码更改命令和更改密码的要求(这是userAccountControl对象属性)结合在一起,在PowerShell单一代码中:

Set-ADAccountPassword jliebert -NewPassword $NewPasswd -Reset -PassThru | Set-ADuser -ChangePasswordAtLogon $True

使用Get-ADUser cmdlet,可以确保密码已成功重置,并显示帐户密码更改的最后日期:

Get-ADUser jliebert -Properties * | select name, pass*

重置密码时,EventID 4724被注册在域控制器(DC)安全日志中。此事件可以检查谁重置了AD中的用户密码。

使用PowerShell重置多个AD用户密码

上面我们展示了如何从PowerShell控制台重置单个AD用户的密码。让我们考虑另一种情况下,当你需要一次更改多个用户的密码。

最简单的情况是,我们必须重置具有相同AD帐户属性的用户的密码。例如,我们需要将所有销售部门用户的密码更改为相同的密码,并在下次登录时更改它们:

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 acidicjustine;Pa$$w0r1 josephomoore;N$isory01 simonecole;k@32d3!2  

使用此PowerShell脚本,我们可以在指定的csv文件中重置每个帐户的密码:

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

执行此代码后,将为文件中的所有AD用户设置一个新的唯一密码。