Como criar, alterar e testar senhas usando PowerShell
Oct 16, 2018
A automação é a chave para otimizar as tarefas de gerenciamento do Active Directory. Neste artigo, vou mostrar como criar, alterar e testar senhas de usuários com scripts de PowerShell.
Instalando o módulo AD PowerShell
Antes de poder usar o PowerShell para gerenciar o Active Directory, você precisa instalar o módulo do PowerShell do Active Directory. Se estiver usando o Windows 10 para gerenciar o AD, instale primeiro as Ferramentas de Administração de Servidor Remoto (RSAT).
Windows 10 Versão 1809
Se você está usando a versão 1809 do Windows 10, o RSAT está incluído como um Recurso Sob Demanda, então você não precisa baixar o pacote RSAT. Para habilitar o RSAT na versão 1809 do Windows 10, execute o seguinte comando em um console PowerShell elevado:
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Versões anteriores do Windows 10
Se você está usando uma versão anterior do Windows 10, baixe o pacote RSAT apropriado do site da Microsoft:
- Se você está gerenciando a versão 1803 ou 1709 do Windows Server, baixe e instale o pacote WS_1803.
- Se você está gerenciando o Windows Server 2016 ou versões anteriores do Windows Server, baixe e instale o pacote WS2016.
Uma vez instalado o RSAT, inicie o console do PowerShell como um administrador local e habilite o módulo do AD PowerShell usando este comando do PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
Criar credencial com senha usando PowerShell
Para criar uma nova conta de usuário, use o cmdlet New-ADUser. No exemplo abaixo, eu codifiquei o domínio ad.contoso.com na variável $UPN. Você deve alterar isso para corresponder ao sufixo UPN que deseja atribuir aos usuários.
Forneça o primeiro nome e o sobrenome do usuário. O UPN e o SamAccountName serão então criados adicionando um ponto entre o primeiro e o último nome. Use o seguinte script 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
Criar nova senha de usuário AD usando PowerShell
O código a seguir irá solicitar que você especifique um nome de usuário e senha. Você deve inserir um nome de usuário que já exista no AD e uma senha que atenda aos requisitos de complexidade de senha do domínio.
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
Alterar senha usando PowerShell
- Alterar a senha de um usuário local
Para alterar a senha de um usuário local, você precisa usar os cmdlets Get-LocalUser e Set-LocalUser:
$Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
- Alterar a senha de um usuário do AD
Para criar uma nova senha de usuário AD usando PowerShell, utilize o seguinte script. Será solicitado que você especifique o nome de usuário de uma conta AD existente e, em seguida, uma nova senha, que deve atender aos requisitos de complexidade de senha do domínio.
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
- Obrigar um usuário a alterar sua senha no próximo login
O cmdlet Set-LocalUser não suporta a configuração de uma conta de usuário local para forçar a alteração de senha no próximo logon. No entanto, você pode alcançar o mesmo objetivo forçando a senha a expirar:
$User = (Read-Host -Prompt "Username")
$Usrstring = "WinNT://localhost/"+$User
$usr=[ADSI] $Usrstring
$usr.passwordExpired = 1
$usr.setinfo()
Mas você pode obrigar os usuários a mudarem as senhas de suas contas AD usando Set-ADAccountPassword:
$User = (Read-Host -Prompt "Username")
Set-Aduser -Identity $User -ChangePasswordAtLogon $true
- Alterar uma senha de administrador
Para alterar a senha do administrador do AD, digite administrator quando for solicitado um nome de usuário usando o código abaixo:
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
Para alterar a senha de um administrador local, digite administrator quando solicitado por um nome de usuário:
$Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
- Altere o atributo “password never expires”
Para definir o atributo “password never expires” em uma conta de usuário local, use Set-LocalUser:
$User = (Read-Host -Prompt "Username")
Set-LocalUser -Name $User -PasswordNeverExpires $true
Para definir o atributo “senha nunca expira” em uma conta de usuário do Active Directory, use Set-ADUser:
$User = (Read-Host -Prompt "Username")
Set-ADUser -Identity $User -PasswordNeverExpires $true
- Altere a senha da conta de serviço
Para alterar as propriedades de logon de um serviço, utilize os cmdlets Get-Credential e Set-Service. O código a seguir altera o serviço AppReadiness de usar a conta do Sistema Local para usar o nome de usuário e senha que são inseridos quando solicitado. Observe que o parâmetro Set-Service -Credential é suportado apenas no PowerShell 6 e posteriores.
$credential = Get-Credential
Set-Service -Name "AppReadiness" -Credential $credential
- Alterar a data de expiração de uma senha no Active Directory
Se você precisa estender o tempo que um usuário pode manter sua senha atual, defina o atributo pwsLastSet para a data atual, concedendo-lhes tempo extra até que o Active Directory os obrigue a alterar sua senha. Limpar o atributo e, em seguida, definir para -1 irá configurá-lo para a data e hora atuais.
$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
- Redefinição de senha em massa
A melhor maneira de fazer os usuários mudarem suas senhas do AD é forçar uma redefinição de senha. Você pode fazer isso em massa combinando os cmdlets Get-ADUser e Set-ADUser. O comando abaixo usa um filtro para obter usuários na unidade organizacional (OU) “Accounts” e encaminha os resultados para o cmdlet Set-ADUser para forçar todos os usuários na OU a mudarem sua senha no próximo login.
Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Accounts,DC=ad,DC=contoso,DC=com" |
Set-ADUser -ChangePasswordAtLogon $true
Testando as credenciais de um usuário
Se você quer testar se as credenciais de um usuário estão funcionando, tudo o que precisa fazer é iniciar um processo utilizando o nome de usuário e senha dele. O código abaixo inicia o cmd.exe usando as credenciais inseridas quando solicitado.
Start-Process -FilePath cmd.exe /c -Credential (Get-Credential)
Compartilhar em
Saiba Mais
Sobre o autor
Russell Smith
Consultor de TI
Consultor de TI e autor especializado em tecnologias de gestão e segurança. Russell tem mais de 15 anos de experiência em TI, escreveu um livro sobre segurança do Windows e coautorou um texto para a série Microsoft’s Official Academic Course (MOAC).
Saiba mais sobre este assunto
Gerenciamento de configuração para controle seguro de endpoint
Leis de Privacidade de Dados por Estado: Abordagens Diferentes para a Proteção da Privacidade
Exemplo de Análise de Risco: Como Avaliar Riscos
O Triângulo da CIA e Sua Aplicação no Mundo Real
O que é Gerenciamento de Registros Eletrônicos?