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