Encontrar Usuários do Active Directory com Senha Expirada (PowerShell)

Encontre Usuários do Active Directory com Senha Expirada (PowerShell). Você é responsável por gerenciar senhas em seu ambiente do Active Directory (AD)? Uma tarefa crucial é identificar usuários cujas senhas expiraram, pois esses usuários não poderão mais fazer login em suas contas até que resetem suas senhas. Este artigo mostra como usar eficientemente o PowerShell para encontrar usuários do Active Directory com senhas expiradas.

Vamos começar nosso blog sobre Encontrar Usuários do Active Directory com Senha Expirada (PowerShell).

Também leia Como Instalar o Módulo PowerShell do Active Directory e Importar

Encontre Usuários do AD com Senhas Expiradas Usando o PowerShell

Seguir este artigo poupa tempo e esforço, pois rapidamente visamos usuários específicos para notificações de redefinição de senha ou expiração. Seja você um administrador de rede ou simplesmente procurando melhorar a segurança do seu ambiente do Active Directory, este guia fornece as informações necessárias para começar.

Pré-requisitos

Se planejarmos seguir este artigo, precisaremos do seguinte:

Localizando Usuários no Active Directory

Antes de redefinir a senha de um usuário, devemos primeiro localizar a conta. Como resultado, nosso primeiro passo deve ser determinar se existe uma reserva. Para isso, execute o cmdlet Get-ADUser com o parâmetro Identity definido como o nome da conta.

O parâmetro Identity aceita um dos quatro identificadores: nome distinto (DN), GUID (objectGUID), ID de Segurança (objectSID) ou nome de conta SAM (SAMAccountName).

Por exemplo, se solicitarmos a redefinição de senha para um usuário específico, devemos primeiro verificar se o usuário existe antes de emitir uma redefinição de conta. Para fazer isso, copie o seguinte comando e cole-o em nosso console do PowerShell. Certifique-se de primeiro alterar o nome do usuário para o correto:

Get-ADUser -Identity

O comando retornou as propriedades do usuário, como mostrado na captura de tela abaixo, confirmando que a conta existe e o nome de usuário está correto:

Encontrando Usuários com Senhas Expiradas no AD

Podemos rapidamente obter a data de expiração da senha para um único usuário ao anexar e usar o atributo msDS-UserPasswordExpiryTimeComputed com o comando Get-ADUser:

Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'

Mas esta linha de código resultará em uma saída ilegível para humanos, então precisamos adicionar a seguinte linha para converter os resultados em um formato legível. Para adicionar a linha abaixo, vamos usar o comando Select-Object -Property em um novo pipeline PowerShell:

Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}

Ao executar o mesmo atributo, msDS-UserPasswordExpiryTimeComputed, com o filtro correto, obtemos uma lista de contas do Active Directory e seus horários de expiração de senha:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Melhoramos o script acima exportando a lista de usuários para um arquivo de texto que poderíamos usar posteriormente. Para fazer isso, podemos usar o comando Out-File que enviará a saída para um arquivo de texto:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt

O script acima gera um arquivo chamado userslist.txt que podemos usar posteriormente. Também omitimos a propriedade ExpiryDate da saída, pois só precisamos dos IDs de usuário de contas expiradas. Usamos esta lista para remediação em massa, que é discutida mais tarde no artigo.

Redefinindo a Senha do Usuário do Active Directory

Agora que aprendemos como usar Get-ADUser para verificar uma conta de usuário, sabemos que o resultado é válido e que o ID do usuário existe. Agora devemos usar o cmdlet Set-ADAccountPassword para redefinir a senha do usuário.

O comando Set-ADAccountPassword altera a senha do usuário se fornecermos a senha antiga. Se não tivermos a senha antiga, o cmdlet a redefine com o parâmetro Reset.

A nova senha gerada aleatoriamente é uma senha aleatória de 14 caracteres com cinco caracteres não alfanuméricos. Para executar, abra uma janela do PowerShell, copie o código, cole-o no PowerShell e pressione Enter:

$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
  • Linha 1: Especifica o nome de usuário cuja senha deve ser redefinida. Certifique-se de substituir a string USERNAME pelo ID de usuário real.
  • Linha 2: Importa a classe de objeto da assembly .NET System.Web.
  • Linha 3: Gera uma senha aleatória com 14 caracteres, incluindo cinco caracteres não alfanuméricos.
  • Linha 4: Converte a senha de texto simples para um objeto de senha seguro (secure string).
  • Linha 5: Facilita a redefinição da senha.
  • Linha 6: Força a conta AD a alterar a senha no próximo logon.
  • Linha 7: Exibe a nova senha no console. No entanto, não recomendamos isso por motivos de segurança. A linha 6 cuida da alteração de senha conforme a preferência do usuário e é considerada a melhor prática para este procedimento.

Melhore a segurança do seu Active Directory e Azure AD

Experimente grátis, Acesso a todos os recursos. – Mais de 200 modelos de relatórios AD disponíveis. Personalize facilmente seus próprios relatórios AD.




Escrevendo a Ferramenta de Redefinição de Senha do Active Directory

Agora temos um script que usamos para redefinir a senha de um usuário. O próximo passo é transformar nosso script em uma ferramenta. Uma ferramenta reutilizável executa as mesmas ações com um mínimo de ações manuais do usuário.

Ao criar uma ferramenta, um aspecto crucial é que quem executar a ferramenta não deve ter que editar o código toda vez. Infelizmente, nosso código ainda requer que o usuário edite a variável $username.

Em vez de permitir que os usuários de nossa ferramenta alterem os valores manualmente, por que não escrever um script que aceite parâmetros? Para fazer isso, siga os passos abaixo:

  1. Abra o Windows PowerShell ISE.
  2. Crie um novo arquivo PowerShell e salve o arquivo com o nome Reset-ADPassword.ps1. Salve o script em nosso local preferido. Este artigo salva o arquivo no diretório C:\PS\scripts .
  3. Por favor, copie e cole o código abaixo em nosso editor de script antes de salvar o script.
param (
     $username
 )

 if (-not($username)) {
     Write-Host "Username not found. Exiting script"
     return $null
 }

 try {
     $null = Get-ADUser -Identity $username -ErrorAction Stop
 } catch {
     Write-Host $_.Exception.Message
     return $null
 }

$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force

 try {
     Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
     Set-ADuser -Identity $username -ChangePasswordAtLogon $true

     [pscustomobject]@{
         Username = $username
         NewPassword = $randomPassword
     }
 } catch {
     Write-Host "There was an error performing the password reset. Please find additional information below."
     Write-host $_.Exception.Message
     return $null
 }
  • Linha 1: Adiciona um parâmetro chamado  username.
  • Linha 5: Verifica se o usuário forneceu um valor para o nome de usuário. O bloco if também exibe uma mensagem e encerra o script se a condição for atendida.
  • Linha 10: Verifica se o nome de usuário é válido ou não.
  • Linha 12: Valida se o nome de usuário é inválido. Exibe uma mensagem e interrompe a execução do script.
  • Linha 17: Gera uma senha aleatória com 14 caracteres e cinco caracteres não alfanuméricos.
  • Linha 18: Converte a senha em texto simples em um objeto de senha segura.
  • Linha 20: Facilita a redefinição da senha.
  • Linha 22: Impele a conta do AD a alterar a senha na próxima vez que fizer login.
  • Linha 24: Exibe a nova senha no console. No entanto, não recomendamos isso por questões de segurança. A linha 6 cuidará da alteração da senha de acordo com o gosto do usuário e é considerada a melhor prática para este procedimento.
  • Linha 28: Exibe uma mensagem de erro se a redefinição falhar.

Execuções de Exemplo da Ferramenta de Redefinição de Senha do AD

A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.

Redefinindo a Senha de um Único Usuário

Suponha que precisamos redefinir a senha de um usuário. Primeiro, execute a ferramenta de redefinição de senha do Active Directory e especifique qual nome de usuário deve ser alvo. Por exemplo, para redefinir a senha de um único usuário, execute o script conforme mostrado abaixo:

.\Reset-ADPassword.ps1 -username USERNAME

Como resultado, o script redefinirá a senha e a exibirá na tela. Por exemplo, esse resultado envia a nova senha para o usuário afetado:

Redefinindo a Senha de Múltiplos Usuários

Felizmente, podemos percorrer uma lista no PowerShell usando arrays e o loop foreach. Além disso, o cmdlet ForEach-Object no PowerShell nos permite processar vários itens simultaneamente. Esse cmdlet nos permite passar vários itens pela pipeline.

Para redefinir as senhas de vários usuários, crie um array com dois ou mais nomes de usuário. Os itens do array são então passados pela pipeline, onde o comando ForEach-Object do PowerShell executa a ferramenta de redefinição de senha em cada nome de usuário.

@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

No entanto, melhoramos isso se remediarmos mais de dois contas de usuário. Lembre-se do arquivo de texto que geramos anteriormente? Nós fazemos uso dele nesta seção.

Precisamos ler o arquivo de texto contendo as contas de usuário e executar a ferramenta de redefinição de senha do AD em cada uma. Para fazer isso, use o cmdlet Get-Content para importar o conteúdo do arquivo de texto para o PowerShell. Depois disso, o script envia os dados para o pipeline e executa o script de redefinição de senha do AD em cada conta.

Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

Após a execução do trecho acima, teremos redefinido várias senhas de usuário em uma única execução.

Obrigado por ler o artigo blog Encontrar Usuários do Active Directory com Senha Expirada (PowerShell). Vamos concluí-lo agora.

Conclusão Encontrar Usuários do AD com Senhas Expiradas PowerShell

Em conclusão, encontrar utilizadores do Active Directory com senhas expiradas usando PowerShell é um processo direto que nos poupa tempo e esforço. Usando o cmdlet Get-ADUser e filtrando os utilizadores com senhas expiradas, você pode identificar e direcionar rapidamente utilizadores específicos para a reposição de senha ou notificações de expiração. Este comando é útil para organizações com um grande número de utilizadores, pois permite gerir proativamente a expiração de senhas e reduzir o risco de violacões de segurança.

Confira a nossa secção do Active Directory no nosso blog aqui, bem como a secção do PowerShell aqui para ler mais conteúdo.

Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/