Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

如何使用 PowerShell 创建、修改和测试密码

如何使用 PowerShell 创建、修改和测试密码

Mar 17, 2023

自动化是简化 Active Directory 管理任务的关键。在本文中,我将向您展示如何使用 PowerShell 脚本创建、修改和测试用户密码。

安装 AD PowerShell 模块

在使用 PowerShell 管理 Active Directory 之前,你需要安装 Active Directory PowerShell 模块。如果你使用 Windows 10 来管理 AD,请先安装 Remote Server Administration Tools (RSAT)。

Windows 10 版本 1809

如果你使用的是 Windows 10 版本 1809,RSAT 作为按需功能(Feature On Demand)包含在系统中,因此你无需下载 RSAT 软件包。要在 Windows 10 版本 1809 中启用 RSAT,请在提升权限的 PowerShell 控制台中运行以下命令:

      Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
      

Windows 10 的更早版本

如果你使用的是 Windows 10 的更早版本,请从以下网站下载相应的 RSAT 软件包:Microsoft’s 网站:

  • 如果您管理 Windows Server 1803 或 1709 版本,请下载并安装 WS_1803 软件包。
  • 如果您管理的是 Windows Server 2016 或更早的版本,请下载并安装 WS2016 软件包。

安装 RSAT 后,请以本地管理员身份启动 PowerShell 控制台,并使用以下 PowerShell 命令启用 AD PowerShell 模块:

      Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
      

使用 PowerShell 创建带密码的凭据

要创建新的用户帐户,请使用 New-ADUser cmdlet。在下面的示例中,我在 $UPN 变量中将 ad.contoso.com 域进行了硬编码。您应将其更改为要分配给用户的 UPN 后缀。

填写用户的名和姓。随后会通过在名和姓之间添加句点(.)来创建 UPN 和 SamAccountName。使用以下 PowerShell 脚本:

      $GivenName = (Read-Host -Prompt "First Name")
$Surname = (Read-Host -Prompt "Last Name")
$User = $GivenName+"."+$Surname
$UPN = $User+"@ad.contoso.com"
$Password = (Read-Host -Prompt "Password" -AsSecureString)
New-ADUser -Name $User -SamAccountName $User -UserPrincipalName $UPN -AccountPassword $Password -GivenName $GivenName -Surname $Surname -Enabled $True
      

使用 PowerShell 创建新的 AD 用户密码

以下代码将提示你指定用户名和密码。你必须输入已在 AD 中存在的用户名,以及符合域密码复杂性要求的密码。

      $User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
      

使用 PowerShell 更改密码

  • 更改本地用户的密码

要更改本地用户的密码,需要使用 Get-LocalUser 和 Set-LocalUser cmdlet:

      $Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
      
  • 更改 AD 用户的密码

要使用 PowerShell 创建新的 AD 用户密码,请使用以下脚本。系统会提示你先指定现有 AD 帐户的用户名,然后输入一个新密码,该密码必须满足域的密码复杂性要求。

      $User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
      
  • 在下次登录时强制用户更改密码

Set-LocalUser cmdlet 不支持将本地用户账户设置为在下次登录时强制更改密码。不过,你可以通过强制密码过期来实现相同的目标:

      $User = (Read-Host -Prompt "Username")
$Usrstring = "WinNT://localhost/"+$User  
$usr=[ADSI] $Usrstring  
$usr.passwordExpired = 1  
$usr.setinfo()
      

不过你可以使用 Set-ADAccountPassword 强制用户更改其 AD 账户密码:

      $User = (Read-Host -Prompt "Username")
Set-Aduser -Identity $User -ChangePasswordAtLogon $true
      
  • 更改管理员密码

要更改 AD 管理员密码,请在使用以下代码提示输入用户名时输入 administrator

      $User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
      

要更改本地管理员密码,请在提示输入用户名时输入 administrator

      $Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
      
  • 更改“密码永不过期”属性

要在本地用户帐户上设置 “password never expires” 属性,请使用 Set-LocalUser:

      $User = (Read-Host -Prompt "Username")
Set-LocalUser -Name $User -PasswordNeverExpires $true
      

要在 Active Directory 用户帐户上设置 “password never expires” 属性,请使用 Set-ADUser:

      $User = (Read-Host -Prompt "Username")
Set-ADUser -Identity $User -PasswordNeverExpires $true
      
  • 更改服务帐户密码

要更改服务的登录属性,请使用 Get-Credential 和 Set-Service cmdlet。下面的代码会将 AppReadiness 服务从使用“本地系统”帐户更改为使用在提示时输入的用户名和密码。请注意,Set-Service -Credential 参数仅在 PowerShell 6 及更高版本中受支持。

      $credential = Get-Credential
Set-Service -Name "AppReadiness" -Credential $credential
      
  • 在 Active Directory 中更改密码的到期日期

如果需要延长用户可继续使用当前密码的时间,请将 pwsLastSet 属性设置为当前日期,这将为他们提供额外的时间,直到 Active Directory 强制他们更改密码。清除该属性,然后将其设置为 -1 会将其设置为当前日期和时间。

      $Username = (Read-Host -Prompt "Username")
$User = Get-ADUser $Username -Properties pwdlastset
$User.pwdlastset = 0
Set-ADUser -Instance $User
$User.pwdlastset = -1
Set-ADUser -Instance $User
      
  • 批量重置密码

让用户更改其 AD 密码的最佳方法是强制进行密码重置。你可以通过组合使用 Get-ADUser 和 Set-ADUser cmdlet 来批量完成。下面的命令使用筛选器获取位于“Accounts”组织单位(OU)中的用户,并将结果通过管道传递给 Set-ADUser cmdlet,从而强制该 OU 中的所有用户在下次登录时更改密码。

      Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Accounts,DC=ad,DC=contoso,DC=com" | 
Set-ADUser -ChangePasswordAtLogon $true
      

测试用户的凭据

如果你想测试用户的凭据是否有效,只需要使用他们的用户名和密码启动一个进程即可。下面的代码会使用提示时输入的凭据来启动 cmd.exe。

      Start-Process -FilePath cmd.exe /c -Credential (Get-Credential)
      

分享到

了解更多

关于作者

Asset Not Found

Russell Smith

IT 顾问

专注于管理与安全技术的 IT 顾问和作者。Russell 拥有超过 15 年的 IT 经验,撰写过一本关于 Windows 安全的书籍,并共同撰写了 Microsoft 官方学术课程(MOAC)系列的相关教材。