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)
O 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
- https://technet.microsoft.com/en-us/library/ee617241.aspx
- https://technet.microsoft.com/en-us/library/ee617192.aspx
- https://technet.microsoft.com/en-us/library/ee617197.aspx
- http://blogs.technet.com/b/heyscriptingguy/archive/2011/11/30/use-powershell-to-find-and-remove-inactive-active-directory-users.aspx
- https://technet.microsoft.com/en-us/library/hh849925.aspx