Desabilitando contas sem uso do Active Directory

Segue procedimento para desabilitar automaticamente contas do seu AD que nao fizeram login nos últimos 90 dias:

  • Crie uma conta que seja “Domain Admin”;
  • Crie uma pasta para armazenar os arquivos de scripts – “C:\Scripts”
  • Crie um arquivo “Disable_Users.bat” com o conteúdo abaixo:
@echo off
cd \Scripts
powershell .\List_Inactive_Users.ps1
powershell .\Send_Mail_Inactive_Users.ps1
powershell .\Disable_Inactive_Users.ps1
del OLD_User*.csv
  • Crie um arquivo “List_Inactive_Users.ps1” com o conteúdo abaixo.  A função dele é de listar em um arquivo CSV todas as contas que serão desativadas, que será enviado por email, para registro das ações tomadas.
import-module activedirectory 
$DateN = (Get-Date -UFormat %Y-%m-%d)
$FileName = "OLD_User-" + $DateN + ".csv"
$DaysInactive = 90 
$time = (Get-Date).Adddays(-($DaysInactive))
Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | export-csv $FileName -notypeinformation
  • Crie um arquivo “Send_Mail_Inactive_Users.ps1” com o conteúdo abaixo. A função dele é de enviar o arquivo CSV gerado para a caixa postal administrativa. Não esqueça de alterar os parâmetros  $From, $To e $SMTPServer.
$From = "[email protected]"
$To = "[email protected]"
$DateN = (Get-Date -UFormat %Y-%m-%d)
$Attachment = "c:\Scripts\OLD_User-" + $DateN + ".csv"
$Subject = "Usuarios que serao desativados - " + $DateN
$Body = "Contas que foram desativadasem " + $DateN
$SMTPServer = "smtp.empresa.com.br"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -Attachments $Attachment
  • Crie um arquivo “Disable_Inactive_Users.ps1” com o conteúdo abaixo. A função dele é de efetivamente desativar as contas.
import-module activedirectory 
$DaysInactive = 90 
$time = (Get-Date).Adddays(-($DaysInactive))
Get-ADUser -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | Disable-ADAccount
  • Por fim crie um agendamento no Windows para que o arquivo BAT seja executado com a frequência desejada. Não esqueça que o agendamento deve ser executado com a conta criada no primeiro passo.

Se voce estiver seguindo as boas praticas de administração, a conta do “Administrator” ou “Administrador” vai ser desativada pelo script. Mas isso nao deve ser nenhum problema porque deve existir pelo menos mais uma conta com os mesmos privilégios – a sua conta administrativa.

Se nao precisar ou querer o email de aviso, pode ser usado apenas o ultimo script.

Se quiser fazer a mesma coisa com as contas de maquinas:

  • List_Inactive_Computers.ps1
import-module activedirectory 
$DateN = (Get-Date -UFormat %Y-%m-%d)
$FileName = "OLD_Computers-" + $DateN + ".csv"
$DaysInactive = 90 
$time = (Get-Date).Adddays(-($DaysInactive))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $time -and enabled -eq $true} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | export-csv $FileName -notypeinformation
  • Send_Mail_Inactive_Computers.ps1
$From = "[email protected]"
$To = "[email protected]"
$DateN = (Get-Date -UFormat %Y-%m-%d)
$Attachment = "c:\Scripts\OLD_Computers-" + $DateN + ".csv"
$Subject = "Contas de computadores que serao desativados - " + $DateN
$Body = "Contas que foram desativadasem " + $DateN
$SMTPServer = "smtp.empresa.com.br"
$SMTPPort = "25"
Send-MailMessage -From $From -to $To -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -Attachments $Attachment
  • Disable_Inactive_Computers.ps1
import-module activedirectory 
$DaysInactive = 90 
$time = (Get-Date).Adddays(-($DaysInactive))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties LastLogonTimeStamp | Disable-ADAccount