Como administrador de Active Directory, você pode usar o PowerShell para listar computadores que não se comunicaram com o domínio nos últimos dias. Isso é útil para identificar contas de computador obsoletas que podem precisar ser desativadas ou excluídas para manter a segurança e a higiene do AD.
No exemplo colocamos 60 dias, mas você pode escolher o tempo.
# **************** inicio *********************
# Define o número de dias de inatividade
$DaysInactive = 60
# Calcula a data de corte (60 dias atrás a partir de hoje)
$CutoffDate = (Get-Date).AddDays(-$DaysInactive)
# Define o caminho para exportar a lista de computadores inativos
$ExportPath = "C:\Temp\InactiveComputers_$((Get-Date).ToString('yyyyMMdd')).csv"
# Importa o módulo ActiveDirectory (se ainda não estiver importado)
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
Write-Host "Procurando computadores que não fizeram logon no domínio nos últimos $DaysInactive dias..."
Write-Host "Data de corte: $($CutoffDate.ToString('dd/MM/yyyy HH:mm:ss'))"
Write-Host ""
try {
# Obtém todos os objetos de computador e filtra pelo LastLogonDate
$InactiveComputers = Get-ADComputer -Filter {LastLogonDate -lt $CutoffDate} -Properties Name, LastLogonDate, OperatingSystem, DistinguishedName |
Sort-Object LastLogonDate
# Verifica se foram encontrados computadores inativos
if ($InactiveComputers) {
Write-Host "Os seguintes computadores não fizeram logon no domínio nos últimos $DaysInactive dias:"
Write-Host "---------------------------------------------------------------------------------------------------"
$InactiveComputers | Format-Table Name, LastLogonDate, OperatingSystem -AutoSize
Write-Host "---------------------------------------------------------------------------------------------------"
# Exporta a lista para um arquivo CSV
Write-Host "`nExportando a lista para: $ExportPath"
$InactiveComputers | Select-Object Name, LastLogonDate, OperatingSystem, DistinguishedName | Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8
Write-Host "`n********************************************************************************"
Write-Host "* A T E N Ç Ã O: Comando de exclusão de computadores inativos COMENTADO! *"
Write-Host "* *"
Write-Host "* Revise a lista de computadores no arquivo CSV ($ExportPath) com MUITO *"
Write-Host "* cuidado antes de prosseguir com a exclusão. *"
Write-Host "* *"
Write-Host "* Para EXCLUIR os computadores listados, DESCOMENTE as linhas abaixo e execute *"
Write-Host "* o script novamente. *"
Write-Host "********************************************************************************"
Write-Host ""
# =========================================================================================
# INÍCIO DO BLOCO DE EXCLUSÃO - DESCOMENTE COM CAUTELA EXTREMA
# =========================================================================================
# Read-Host "Pressione Enter para iniciar a exclusão dos computadores listados. (Ctrl+C para cancelar)"
# foreach ($computer in $InactiveComputers) {
# Write-Host "Excluindo computador: $($computer.Name) (DN: $($computer.DistinguishedName))"
# try {
# Remove-ADComputer -Identity $computer.DistinguishedName -Confirm:$false
# Write-Host "Computador $($computer.Name) excluído com sucesso." -ForegroundColor Green
# } catch {
# Write-Warning "Falha ao excluir o computador $($computer.Name): $($_.Exception.Message)"
# }
# }
# =========================================================================================
# FIM DO BLOCO DE EXCLUSÃO
# =========================================================================================
} else {
Write-Host "Nenhum computador encontrado que não tenha feito logon nos últimos $DaysInactive dias."
}
} catch {
Write-Error "Ocorreu um erro ao consultar o Active Directory: $($_.Exception.Message)"
Write-Host "Certifique-se de que o módulo ActiveDirectory esteja instalado e que você tenha permissões adequadas."
}
Write-Host "`nScript concluído."
# ***************** fim **************************
Como usar o script:
- Abra o PowerShell como Administrador: Isso é importante para ter as permissões necessárias para consultar o Active Directory.
- Copie e cole o script: Cole o código acima na janela do PowerShell.
- Execute o script: Pressione Enter.
Explicação do Script:
$DaysInactive = 60: Define o número de dias de inatividade que você deseja verificar. Você pode alterar esse valor conforme sua política.$CutoffDate = (Get-Date).AddDays(-$DaysInactive): Calcula a data exata 60 dias atrás a partir da data e hora atuais. QualquerLastLogonDateanterior a essa data será considerado inativo.Import-Module ActiveDirectory: Garante que o módulo do Active Directory esteja carregado. Ele é essencial para os cmdletsGet-ADComputer. Se você tiver o PowerShell ISE ou VS Code, ele geralmente é carregado automaticamente quando você usa um cmdlet do AD.Get-ADComputer -Filter {LastLogonDate -lt $CutoffDate} -Properties Name, LastLogonDate, OperatingSystem, DistinguishedName:Get-ADComputer: Este cmdlet é usado para obter objetos de computador do Active Directory.-Filter {LastLogonDate -lt $CutoffDate}: Este é o filtro principal. Ele busca por computadores onde a propriedadeLastLogonDate(data do último logon) é menor que a$CutoffDatecalculada.-Properties Name, LastLogonDate, OperatingSystem, DistinguishedName: Especifica quais propriedades dos objetos de computador você deseja recuperar. Por padrão,Get-ADComputerretorna apenas um subconjunto de propriedades.LastLogonDateé uma propriedade construída que o PowerShell cria a partir doLastLogonTimeStamp(um atributo de carimbo de data/hora no formatoFileTimeque precisa ser convertido).OperatingSystemeDistinguishedNamesão úteis para mais contexto.Sort-Object LastLogonDate: Ordena os resultados pela data do último logon.
Format-Table Name, LastLogonDate, OperatingSystem -AutoSize: Exibe os resultados em um formato de tabela fácil de ler, ajustando as colunas automaticamente.Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8: Opcionalmente, exporta a lista de computadores inativos para um arquivo CSV.$ExportPath: Define o caminho e o nome do arquivo CSV. Ele incluirá a data atual no nome do arquivo para evitar sobrescrever.-NoTypeInformation: Impede que o PowerShell adicione uma linha de informações de tipo no início do arquivo CSV, tornando-o mais limpo.-Encoding UTF8: Garante que caracteres especiais sejam tratados corretamente no CSV.
- Tratamento de Erros (
try-catch): Incluí um blocotry-catchbásico para capturar erros, como se o móduloActiveDirectorynão puder ser carregado ou se houver problemas de permissão.
Considerações importantes:
- Replication de
LastLogonDate/LastLogonTimeStamp: O atributoLastLogonTimeStamp(do qualLastLogonDateé derivado) não é replicado imediatamente para todos os Controladores de Domínio. Ele é atualizado no Controlador de Domínio que autentica o logon e, em seguida, replicado para outros DCs após um certo período (por padrão, 14 dias + um atraso de 5 dias). Isso significa que a data do último logon pode não ser 100% precisa em todos os DCs, mas é geralmente suficiente para identificar contas inativas após 60 dias. Para uma precisão ainda maior, você precisaria consultar todos os Controladores de Domínio e pegar a data mais recente. No entanto, para 60 dias, a abordagem deLastLogonDateé geralmente aceitável. - Permissões: O usuário que executa o script precisa ter permissões de leitura no Active Directory. Um administrador de domínio geralmente tem essas permissões.
- Localização do arquivo CSV: O script tenta exportar o CSV para
C:\Temp\. Certifique-se de que essa pasta exista ou altere o caminho para um local onde você tenha permissão de escrita. Bloco de Exclusão (COMENTADO):
- Adicionado um bloco
foreach ($computer in $InactiveComputers)que itera sobre cada computador inativo encontrado. Remove-ADComputer -Identity $computer.DistinguishedName -Confirm:$false: Este é o cmdlet para remover um objeto de computador do Active Directory.-Identity $computer.DistinguishedName: Especifica o objeto a ser removido pelo seuDistinguishedName, que é um identificador único e completo.-Confirm:$false: MUITO IMPORTANTE! Por padrão,Remove-ADComputersolicita confirmação para cada exclusão.Confirm:$falsesuprime esse prompt. Use isso com extrema cautela, pois significa que os computadores serão excluídos sem um prompt individual. Se você preferir ser perguntado para cada exclusão, remova-Confirm:$false(mas isso pode ser tedioso para muitas contas).
- Incluído tratamento de erros (
try-catch) dentro do loop para cada exclusão, para que o script não pare se uma exclusão falhar. - Mensagens informativas sobre o status da exclusão.
- Adicionado um bloco
-
Mensagens de Aviso Adicionais:
- Várias mensagens
Write-Hostforam adicionadas para enfatizar que o comando de exclusão está comentado e para orientar o usuário sobre a necessidade de revisão cuidadosa antes de descomentar.
- Várias mensagens
- Execute o script como está (com a parte de exclusão comentada).
- Analise cuidadosamente o arquivo CSV gerado (
C:\Temp\InactiveComputers_YYYYMMDD.csv). Verifique se não há nenhum computador que você precise manter ativo. - Se estiver satisfeito com a lista, edite o script PowerShell:
- Remova os símbolos
#das linhas dentro do bloco "INÍCIO DO BLOCO DE EXCLUSÃO" e "FIM DO BLOCO DE EXCLUSÃO". - Você pode optar por descomentar a linha
Read-Host "Pressione Enter para iniciar a exclusão..."se quiser uma pausa final antes da exclusão.
- Remova os símbolos
- Execute o script novamente (com a parte de exclusão descomentada).
Fluxo de Trabalho Recomendado para Exclusão:
Lembre-se: Gerenciar objetos inativos é uma boa prática de segurança, mas a automação da exclusão exige um planejamento e validação rigorosos.
Este script é uma ótima base para começar a identificar e gerenciar contas de computador inativas no seu ambiente AD.
Desejo sucesso em sua jornada.

Comentários
Postar um comentário