Como encontrar computadores e usuários inativos no AD com Powershell

Uma tarefa frequente de um administrador do Active Directory é fazer uma lista de contas de usuário e ou computador desabilitadas ou inativas. Você pode usar consultas LDAP salvas no console ADUC e cmdlets do PowerShell para obter uma lista de objetos inativos em um domínio do Active Directory. 

Neste artigo, mostraremos como usar o PowerShell para localizar contas de usuário e computador inativas.

Leia mais:

Como Remover o Azure AD Connect
Baixar o nível funcional do seu domínio ou floresta no Windows Server
Converter usuários sincronizados em usuários somente na nuvem do Azure AD
Como ocultar usuário da lista de endereço (AD Connect)
Os melhores cursos de Windows Server de 2021

Para usar todos os cmdlets do PowerShell discutidos abaixo, pelo menos o PowerShell versão 3.0 e o Remote Server Administration Toolkit ( RSAT ) devem estar instalados no computador. 

Habilite o Módulo Active Directory para Windows PowerShell a partir do RSAT (Painel de Controle -> Programas-> Ativar e desativar recursos do Windows-> Ferramentas de Administração de Servidor Remoto -> Ferramentas de Administração de Função -> Ferramentas AD DS e AD LDS).

Este módulo PowerShell também pode ser habilitado usando este comando:

Add-WindowsFeature RSAT-AD-PowerShell

Inicie o console do PowerShell e importe o Active Directory para o módulo PowerShell:

Import-Module ActiveDirectory

Como encontrar computadores inativos (antigos) no domínio do Active Directory?

Você pode usar o cmdlet Get-ADComputer para localizar objetos de computador inativos em um domínio. O atributo LastLogonTimeStamp pode ser usado como critério de pesquisa. Observe que esse atributo não pode ser usado para recuperar informações em tempo real sobre a última vez que um computador fez logon no domínio. No entanto, devido ao fato de que este atributo é replicado entre DCs a cada 9-14 dias, você pode obter informações sobre o último tempo de logon do computador de qualquer controlador de domínio (ao contrário do atributo LastLogonDate , que é atualizado apenas no DC através do qual o computador logado).

Você pode verificar o valor atual do atributo LastLogonTimeStamp nas propriedades do computador no console ADUC na guia Editor de Atributos.

Use os comandos a seguir para localizar todos os computadores em uma UO específica que não tenham feito logon por mais de 180 dias:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Computers,OU=Mun,DC=contoso,dc=com’| Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_computers.csv

Este comando irá gerar um arquivo CSV com uma lista de computadores inativos que não foram registrados no domínio por mais de seis meses.

Você pode desativar as contas de computador encontradas:

Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Computers,OU=Mun,dc=contoso,dc=com’| Disable-ADAccount

Mova esses objetos de computador para uma UO separada:

Get-ADComputer ... | Move-ADObject -TargetPath “OU=Disabled Computers,DC=contoso,DC=com”

Ou exclua computadores inativos:

Get-ADComputer ... | Remove-ADComputer

Encontrar contas de usuário inativas no Active Directory

Você também pode usar o atributo lastLogonTimeStamp para localizar contas de usuário inativas. Para construir uma lista de usuários inativos, você precisa usar este atributo, e não lastLogon (o atributo lastLogon não é replicado entre controladores de domínio).

O script a seguir permite selecionar contas de usuário habilitadas que não se conectaram ao domínio por mais de seis meses (180 dias) usando o cmdlet Get-ADUser:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Users,OU=Mun,dc=woshub,dc=com’| ?{$_.Enabled –eq $True} |  Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_users.csv

Você pode desativar usuários inativos:

Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Users,OU=Mun,dc=woshub,dc=com’| Disable-ADAccount

Se você precisar remover contas de usuário inativas do AD, use o pipeline com Remove-ADUser.

Usando Search-ADAccount para encontrar objetos AD inativos

Você pode usar os cmdlets Get-ADUser, Get-ADComputer ou Get-ADObject para localizar objetos inativos no AD. No entanto, criar o filtro correto para esses comandos pode ser complicado. O módulo ActiveDirectory PowerShell tem um cmdlet mais conveniente para executar essas tarefas –   Search-ADAccount . Este cmdlet é usado para localizar objetos de qualquer tipo (usuários e computadores). Vejamos exemplos de uso do cmdlet Search-ADAccount para tarefas típicas de pesquisa de objetos desabilitados, inativos e bloqueados no AD.

Aqui está a lista das chaves mais importantes do cmdlet Search-ADAccount:

Chave Search-ADAccountDescrição
-AccountDisabledPesquisa de contas desativadas
-AccountExpiredPesquisa de contas expiradas
-AccountExpiring [-DateTime DateTime] [-TimeSpan TimeSpan]Busca das contas a serem vencidas em um determinado período de tempo (-TimeSpan) ou em uma data específica (-DateTime)
-AccountInactive [-DateTime DateTime] [-TimeSpan TimeSpan]Pesquisa das contas não logadas desde uma determinada data (-DateTime) ou durante um determinado período de tempo (-TimeSpan)
-LockedOutPesquisa das contas bloqueadas pela política de senha de domínio
-PasswordExpiredPesquisa das contas com as senhas expiradas
-PasswordNeverExpiresContas com o atributo PasswordNeverExpires definido (atributo UserAccountControl)

Por exemplo, vamos exibir a lista de contas de usuário desabilitadas no domínio:

Search-ADAccount -UsersOnly –AccountDisabled

Você pode limitar o escopo da pesquisa a um contêiner específico do Active Directory (UO):

Search-ADAccount -UsersOnly –AccountDisabled –searchbase "OU=Admins,OU=Accounts,DC=woshub,DC=com"

Os mesmos dados podem ser apresentados em uma forma de tabela mais conveniente usando este comando:

Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=woshub,DC=com"|ft -AutoSize

Se você precisar obter a lista de usuários com deficiência contendo determinados atributos de usuário e apresentá-la como uma tabela gráfica a ser classificada, execute o seguinte:

Search-ADAccount -UsersOnly AccountDisabled |sort LastLogonDate | Select Name,LastLogonDate,DistinguishedName |out-gridview -title "Disabled Users"

A lista de contas de usuário bloqueadas:

Search-ADAccount -UsersOnly –LockedOut

A lista de contas de usuário que estiveram inativas nos últimos 60 dias:

$timespan = New-Timespan –Days 60
Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan | ?{$_.Enabled –eq $True}

Para contar essas contas de usuário:

Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan | ?{$_.Enabled –eq $True} | Measure

A lista de computadores não registrados na rede de domínio nos últimos 90 dias:

Search-ADAccount -AccountInactive –ComputersOnly -TimeSpan 90

Ou desde uma certa data:

Search-ADAccount -AccountInactive -ComputersOnly -DateTime ‘1/1/2021’|Select Name,LastLogonDate| ft

Para exportar a lista de objetos para um CSV, use este comando:

Search-ADAccount -AccountDisabled -UsersOnly| Export-Csv "c:\ps\disabled_users.csv"

Este artigo foi útil?

Para manter um padrão de qualidade para vocês, investimos em um ótimo plano de hospedagem, CDN Pago, Plugins de Otimização para o Site, etc…

Ajude-nos a manter o projeto ativo! 

Acompanhe as novidades em tempo real. Siga nosso perfil no Instagram..

Felipe Santos
Felipe Santos é Arquiteto de Cloud e Segurança, com vivência em Administração de Ambientes Windows Server, Cluster, Storages, Backups Veeam e Office 365.
pt_BRPortuguese

ATÉ 90% DE DESCONTO

DECOLE SUA CARREIRA!!

Quer dar um upgrade na sua carreira? 

Invista em você e saia na frente! Conquiste aquele emprego dos sonhos em 2022!