Encontre 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 redefinam suas senhas. Este artigo mostra como usar eficientemente o PowerShell para encontrar usuários do Active Directory com senhas expiradas.

Vamos começar nosso artigo 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

Encontrar Usuários do AD com Senhas Expiradas Usando PowerShell

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

Pré-requisitos

Se planejarmos seguir este artigo, precisaremos do seguinte:

  • A Windows computer joined to an Active Directory domain.
  • Módulo ActiveDirectory instalado no computador.
  • O computador também deve ter pelo menos o Windows PowerShell 5.1 ou superior.

Encontrando 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 uma reserva existe. Para fazer 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 da conta SAM (SAMAccountName).

Por exemplo, se solicitarmos a redefinição da 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 comando a seguir e cole 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, conforme 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 vencimento da senha para um único usuário, adicionando e usando o atributo msDS-UserPasswordExpiryTimeComputed com o comando Get-ADUser:

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

Mas essa 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, usaremos o comando Select-Object -Property em um novo pipeline do PowerShell:

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

Executando o mesmo atributo, msDS-UserPasswordExpiryTimeComputed, com o filtro correto, obtemos uma lista de contas do Active Directory e seus horários de vencimento 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 que expiraram. Usamos esta lista para remediação em massa, que é discutida posteriormente 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 de um 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 será redefinida. Certifique-se de substituir a string USERNAME pelo ID de usuário real.
  • Linha 2: Importa a classe de objeto da montagem .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 em um objeto de senha seguro.
  • Linha 5: Facilita a redefinição da senha.
  • Linha 6: Força a conta do AD a mudar 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 de acordo com a preferência do usuário e é considerada a melhor prática para este procedimento.

Melhore sua Segurança do Active Directory e do Azure AD

Experimente gratuitamente, acesso a todos os recursos. – Mais de 200 modelos de relatórios de AD disponíveis. Personalize facilmente seus próprios relatórios de 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 na pasta C:\PS\scripts.
  3. Por favor, copie e cole o código abaixo no nosso editor de scripts 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, incluindo 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: Impõe que a conta do AD altere a senha na próxima vez que fizer login.
  • Linha 24: Exibe a nova senha no console. No entanto, não recomendamos isso por motivos 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 esse procedimento.
  • Linha 28: Exibe uma mensagem de erro se a redefinição falhar.

Exemplos de Execução 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 será o 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 redefine a senha e a exibe 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 pelo 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 pelo 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, podemos melhorar isso se corrigirmos mais de dois contas de usuário. Lembra do arquivo de texto que geramos anteriormente? Nós o usamos 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 Senhas Expiradas (PowerShell). Concluiremos agora.

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

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

Confira a seção de Active Directory do nosso blog aqui e também a seção de PowerShell aqui para ler mais conteúdo.

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