Het beheren van inactieve accounts in Active Directory is een veelvoorkomende taak. Beheerders moeten vaak ongebruikte gebruikers- of computeraccounts opschonen om het domein overzichtelijk te houden, potentiële beveiligingsrisico’s te verminderen en te voorkomen dat de AD-database onnodig zwaar wordt. Wilt u weten welke accounts al lange tijd niet meer zijn ingelogd? PowerShell is daarvoor de ideale oplossing: het is flexibel en kan veel objecten tegelijk verwerken. Soms is het echter lastig om het juiste attribuut of filter te vinden, vooral omdat de lastLogonTimestamp niet realtime is en afhankelijk is van replicatie. Daarom is het cruciaal om een betrouwbare manier te vinden om oude accounts te identificeren die daadwerkelijk inactief zijn.
Deze handleiding gaat over het gebruik van PowerShell (en een paar specifieke commando’s) om inactieve gebruikers- en computeraccounts op te sporen. Aan het einde van deze handleiding heb je een duidelijke methode voor het genereren van rapporten, zowel voor reguliere opruiming als voor audits, en zelfs voor het uitschakelen of verwijderen van oude accounts die je niet meer nodig hebt. Je krijgt een lijst met inactieve accounts met informatie zoals de laatste aanmeldtijd, en je kunt de opruiming zelfs automatiseren als je dat wilt. Let op: als je nieuw bent met PowerShell of AD-modules, moet je mogelijk eerst een aantal functies inschakelen (zoals RSAT en de Active Directory-module).Soms moet je RSAT op bepaalde Windows-systemen handmatig installeren of een snel commando uitvoeren om alles te laden.
Hoe vind ik inactieve (oude) computers en gebruikers in Active Directory?
Methode 1: Inactieve computers vinden met LastLogonTimeStamp
Dit is waarschijnlijk de meest gebruikelijke manier om oude computers in Active Directory te herkennen. De LastLogonTimeStamp wordt weliswaar gerepliceerd tussen domeincontrollers, maar slechts ongeveer elke week. Niet realtime, maar voldoende voor een algemene indicatie. De truc is om de LastLogonTimeStamp-waarde te vergelijken met een datum – bijvoorbeeld 180 dagen geleden – en te kijken welke computers al die tijd inactief zijn geweest.
Dit is een overzicht van de commando’s die je waarschijnlijk nodig hebt:
$LastLogonDate = (Get-Date).AddDays(-180) Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate} -SearchBase "OU=Computers, OU=Mun, DC=woshub, DC=com" | Sort-Object LastLogonTimeStamp | Format-Table Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_. LastLogonTimeStamp)}} -AutoSize
Met deze opdracht wordt een lijst gegenereerd van computers in de opgegeven OU die al meer dan een half jaar niet zijn ingelogd. Als die uitvoer nuttig lijkt, kunt u Get-ADComputer met de juiste filters toevoegen. U kunt de lijst exporteren als CSV of deze computers direct uitschakelen.
Get-ADComputer...| Export-Csv C:\ps\inactive_computers.csv -NoTypeInformation
En als je echt proactief wilt zijn, kun je die computers uitschakelen met:
Get-ADComputer...| Disable-ADAccount
Of verplaats ze naar een locatie zoals de OU “Uitgeschakelde computers”.
Get-ADComputer...| Move-ADObject -TargetPath "OU=Disabled Computers, DC=woshub, DC=com"
Soms zie ik dat accounts na het uitvoeren van deze commando’s nog steeds actief lijken of dat de lastLogonTimestamp iets verouderd is. Windows moet het natuurlijk altijd ingewikkelder maken dan nodig.
Methode 2: Inactieve gebruikersaccounts vinden
Hetzelfde geldt voor gebruikers: LastLogonTimeStamp is hier je beste vriend. Je kunt een commando maken dat een lijst weergeeft van gebruikersaccounts die al een half jaar niet actief zijn geweest:
$LastLogonDate = (Get-Date).AddDays(-180) Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate} -SearchBase "OU=Users, OU=Mun, DC=woshub, DC=com" | Where-Object {$_. Enabled -eq $true} | Format-Table Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_. LastLogonTimeStamp)}} -AutoSize
Je kunt die verouderde accounts uitschakelen of de lijst exporteren voor controle. Gebruik hiervoor de opdracht Disable-ADAccount of Remove-ADUser als je dat aandurft.
Methode 3: Alles afdekken met Search-ADAccount
Dit is echt een redder in nood. In plaats van te rommelen met attributen of handmatig te filteren, is Search-ADAccount een alles-in-één commando waarmee je in één keer uitgeschakelde, verlopen, vergrendelde of inactieve objecten kunt vinden. Het is als het Zwitserse zakmes voor het opschonen van Active Directory.
Om bijvoorbeeld uitgeschakelde gebruikersaccounts te vinden, voert u het volgende commando uit:
Search-ADAccount -UsersOnly -AccountDisabled
En als je wilt zoeken naar een specifieke OU:
Search-ADAccount -UsersOnly -AccountDisabled -SearchBase "OU=Admins, OU=Accounts, DC=woshub, DC=com"
Om meer gegevens in een overzichtelijker formaat te bekijken, kunt u ze doorsturen naar Format-Table:
Search-ADAccount -UsersOnly -AccountDisabled -SearchBase "OU=Admins, OU=Accounts, DC=woshub, DC=com" | Format-Table Name, LastLogonDate, Enabled -AutoSize
Deze cmdlet biedt ook ondersteuning voor het vinden van geblokkeerde accounts of accounts die gedurende een bepaalde periode inactief zijn geweest, wat erg handig is tijdens een grondige opruimactie of beveiligingsaudit.
Soms is er wat gepruts nodig, vooral met filters of het specificeren van zoekcriteria, maar uiteindelijk maakt Search-ADAccount het eenvoudig voor AD-professionals die niet elk attribuut handmatig willen aanpassen. In sommige configuraties levert het misschien geen perfecte realtime resultaten op, maar het komt er dicht genoeg bij in de buurt om weloverwogen beslissingen te nemen.
Samenvatting
- Gebruik
Get-ADComputerin combinatie met LastLogonTimeStamp om ongebruikte computers te vinden. - Gebruik
Get-ADUserLastLogonTimeStamp voor verouderde gebruikersaccounts. - Probeer
Search-ADAccounteen uitgebreidere scan van AD-objecten uit te voeren. - Activeer het uitschakelen of verwijderen van een account met Disable-ADAccount of Remove-ADUser.
Samenvatting
Al met al is het vinden van inactieve accounts geen hogere wiskunde, maar het vereist wel enige kennis van PowerShell en AD-kenmerken. Als je deze controles regelmatig uitvoert, zul je snel zien welke objecten overbodig zijn en veilig kunnen worden uitgeschakeld of verwijderd. Houd er rekening mee dat lastLogonTimestamp niet perfect is – het is meer een schatting – dus sommige legitieme accounts kunnen inactief lijken terwijl ze dat niet zijn, of andersom. Desondanks zijn deze methoden degelijk genoeg voor de meeste opruimtaken. Hopelijk helpt dit om van een ogenschijnlijk enorme klus iets beheersbaars te maken.