Compartilhar via


Active Directory: Desabilitar Contas Inativas

Visão Geral

É muito comum na administração do dia a dia do Active Directory que alguns processos importantes sejam negligenciados. Como remover as contas de maquinas após a remoção do hardware, ou falhas de comunicação que permitam que contas de usuários que já saíram da organização permaneçam habilitadas.

Utilizando o Powershell é possível listar contas de maquinas e usuários inativos no Active Directory. Para esta demostração vou usar um domínio chamado home.local. Criei uma estrutura de unidade organizacionais com a raiz Desabilitado e duas estruturas abaixo, uma para maquinas e outra para usuários.

   

Desabilitar Usuários

Neste exemplo foi utilizado o Get-Date para definir o período de inatividade das contas e criado uma variável. No comando abaixo foi definido um período de 90 dias de inatividade, altere o campo adddays(número de dias)

$DiasInativos = (get-date).adddays(-90)

Get-ADUser foi usado para procurar os usuários, a pesquisa pode ser limitada no parâmetro -SearchBase "OU=Nome da OU,DC=nomefqdn,DC=nomefqdn", no caso abaixo a pesquisa esta configurada para todo a estrutura de OU's do domínio. No parâmetro -Filter é aplicado o filtro do período e de usuários habilitados. 

$ListaUsuarios=Get-ADUser -SearchBase "DC=home,DC=local" -filter {(lastlogondate -notlike "*" -OR lastlogondate -le $DiasInativos) -AND (passwordlastset -le $DiasInativos) -AND (enabled -eq $True)}

Os usuários podem ser listados usando o nome da variável $ListaUsuarios

Para desabilitar as contas dos usuários utilize o cmdlet *DisableADAccount. *

$ListaUsuarios | Disable-ADAccount

Com o cmdlet Move-ADObject move os usuários para a unidade organizacional desativados.

$ListaUsuarios | % {Move-ADObject $_.DistinguishedName -TargetPath "OU=Usuarios,OU=Desabilitado,DC=home,DC=local" }

As contas devem estar na unidade de destino e desabilitadas. 

Desabilitar Computadores

Para desabilitar as contas de computadores vou utilizar o mesmo período de 90 dias utilizado para os usuários. 

Para alterar o tempo basta utilizar *Get-Date *para definir um novo período de inatividade das contas. 

$DiasInativos = (get-date).adddays(-90)

Para filtra as contas das maquinas utilize o Get-ADComputer, com o mesmo filtro aplicado para os usuários. 

$ListaComputadores= Get-ADComputer -SearchBase "DC=home,DC=local" -filter {(lastlogondate -notlike "*" -OR lastlogondate -le $DiasInativos) -AND (passwordlastset -le $DiasInativos) -AND (enabled -eq $True)}

Para visualizar as contras use a variável $ListaComputadores

Para desabilitar as contas das estações execute,

$ListaComputadores | Disable-ADAccount

Execute o Move-ADObject para mover as contas das maquinas para a OU de destino. 

$ListaComputadores | % {Move-ADObject $_.DistinguishedName -TargetPath "OU=Computadores,OU=Desabilitado,DC=home,DC=local" }

 

As as contas das maquinas serão movidas para unidade organizacional de destino  e desabilitadas. 

Automação e Relatórios

Os comandos podem ser organizados em um script powershell para agendar a manutenção. Altere o parâmetro de pesquisa do Active Directory e dias de inatividade.

​# Script para mover e desabilitar contas de usuários e computadores inativas do Active Directory

# Domain Services 

# Defina a quantidade de dias inativos.

$DiasInativos = (get-date).adddays(-90)

# Pesquisa na raiz do diretório por usuários que excedam o valor definido de dias. E cria

# uma variável chamada $ListaUsuarios. 

$ListaUsuarios=Get-ADUser -SearchBase "DC=home,DC=local" -filter {(lastlogondate -notlike "*" -OR lastlogondate -le $DiasInativos) -AND (passwordlastset -le $DiasInativos) -AND (enabled -eq $True)} 

# Desabilita os usuários listados

$ListaUsuarios | Disable-ADAccount

# Move os usuários da lista para OU de usuários desativados.

$ListaUsuarios | % {Move-ADObject $_.DistinguishedName -TargetPath "OU=Usuarios,OU=Desabilitado,DC=home,DC=local" }

Pesquisa na raiz do diretório por computadores que excedam o valor definido de dias. E cria

# uma variável chamada $ListaComputadores

$ListaComputadores= Get-ADComputer -SearchBase "DC=home,DC=local" -filter {(lastlogondate -notlike "*" -OR lastlogondate -le $DiasInativos) -AND (passwordlastset -le $DiasInativos) -AND (enabled -eq $True)}

# Desabilita as contas de computadores.

$ListaComputadores | Disable-ADAccount

# Move as contas para a OU de computadores desativados

$ListaComputadores | % {Move-ADObject $_.DistinguishedName -TargetPath "OU=Computadores,OU=Desabilitado,DC=home,DC=local" }

# Esta parte envia um email para os administradores com a lista de maquinas

# e usuários. Com a data que o script foi eecutado.

# Cria uma variável com a data do dia

$data=Get-Date

# Envia um email para os endereços do administrador

Send-Mailmessage -to "group02@home.eti.br" -from "admin@home.eti.br" -subject "Usuário  Desabilitados $data" -Body ($ListaUsuarios + $ListaComputadores | fl DistinguishedName  | Out-String) -SmtpServer home-eti-br.mail.protection.outlook.com 

No script acima  a variável $data foi populada com a data do dia. 

E o Send-Mailmessage foi usado para enviar o email com as contas desativadas. Neste cmd altere os campos de -to com o endereço de email destino, o campo -from o endereço de orifem e o -SmtpServer o endereço do servidor de correio. 

*Send-Mailmessage -to "<email de destino>" -from "<email de origem>" -subject "Assunto do email" -Body "corpo do email" -SmtpServer endereço do servidor de email *

O email deve chegar como o print abaixo. 

Agende uma tarefa com o script para automatizar o processo de desabilitar usuários.

Referências