Les comptes inactifs dans Active Directory, qu’il s’agisse d’utilisateurs ou de machines, représentent un risque de sécurité latent. Ils peuvent être exploités par des attaquants ou créer une fausse perception de l’état réel du parc informatique. Il est donc crucial de détecter, désactiver puis supprimer régulièrement ces objets obsolètes.
Objectif
Ce guide vous explique comment :
- Identifier les comptes ordinateurs inactifs depuis un certain temps.
- Les désactiver de manière préventive.
- Les supprimer définitivement, selon votre politique de rétention.
🛡️ Il est recommandé d’adopter une approche en plusieurs étapes : identification → désactivation → suppression, afin de limiter les risques de suppression accidentelle.
Outil utilisé : dsquery
dsquery
est un utilitaire en ligne de commande disponible sur les serveurs Windows avec le rôle AD DS Tools. Il permet d’interroger Active Directory selon des critères personnalisés.
Étape 1 : Trouver les ordinateurs inactifs
Pour rechercher les ordinateurs inactifs depuis 12 semaines (environ 3 mois), limitez les résultats à 100 pour un test :
dsquery computer -inactive 12 -limit 100

Vous pouvez ajuster la période (
-inactive
) selon votre politique (valeur en semaines).
Étape 2 : Désactiver les comptes inactifs
Une fois les machines identifiées, désactivez-les :
dsquery computer -inactive 12 | dsmod computer -disabled yes
💡 Les comptes désactivés peuvent être déplacés dans une OU spécifique pour suivi et vérification avant suppression.
Étape 3 : Supprimer les ordinateurs désactivés
Pour lister puis supprimer tous les comptes ordinateurs désactivés :
dsquery computer -disabled | dsrm -noprompt
⚠️ Le paramètre
-noprompt
supprime sans confirmation. À utiliser avec précaution, surtout dans les scripts automatisés.
Étape 4 : Supprimer directement les comptes inactifs
Si votre politique autorise la suppression immédiate sans phase de désactivation, utilisez :
dsquery computer -inactive 12 | dsrm -noprompt
Remarques importantes
- Exécutez toutes les commandes dans une session avec droits d’administrateur AD.
- Testez d’abord avec des OU de test avant de généraliser à l’ensemble du domaine.
- Conservez une trace (export CSV ou log) des objets supprimés à des fins d’audit.
Qu’en est-il des comptes utilisateurs ?
Les mêmes commandes s’appliquent en remplaçant computer
par user
. Exemple :
dsquery user -inactive 8 | dsmod user -disabled yes
Bonnes pratiques d’organisation
- Créez une OU dédiée pour les comptes désactivés (
_ToBeDeleted
ouStaging_Trash
). - Intégrez ces opérations dans un script PowerShell programmé (ou tâche planifiée).
- Complétez cette approche avec une solution de supervision (Azure AD Identity Protection, SCCM, etc.) pour remonter les objets non conformes.
Script PowerShell : nettoyage des comptes ordinateurs inactifs AD
# ===================================================================
# Script : Clean-InactiveComputers.ps1
# Auteur : Lijane Consulting
# Objet : Identifier, désactiver ou supprimer les comptes ordinateurs inactifs dans AD
# Version : 1.0
# ===================================================================
# 🔧 PARAMÈTRES CONFIGURABLES
$weeksInactive = 12 # Période d'inactivité en semaines
$limitResults = 1000 # Nombre maximum de résultats retournés (0 = illimité)
$exportPath = "C:\Scripts\Computers_Inactifs.csv"
# 🟩 Activer les modules selon besoin
$doListing = $true # true = recherche uniquement
$doDisable = $false # true = désactiver les comptes trouvés
$doDelete = $false # true = supprimer les comptes trouvés ou désactivés
# ===================================================================
Write-Host "`n🧹 Début du traitement des ordinateurs inactifs ($weeksInactive semaines)..." -ForegroundColor Cyan
# Construction de la commande dsquery
$dsqueryCmd = "dsquery computer -inactive $weeksInactive"
if ($limitResults -gt 0) {
$dsqueryCmd += " -limit $limitResults"
}
# Exécution de la requête
$inactiveComputers = Invoke-Expression $dsqueryCmd
if (!$inactiveComputers) {
Write-Host "Aucun ordinateur inactif trouvé." -ForegroundColor Yellow
exit
}
# Export CSV
if ($doListing) {
$inactiveComputers | ForEach-Object {
[PSCustomObject]@{
DistinguishedName = $_
Nom = ($_ -split ',')[0] -replace 'CN='
}
} | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8
Write-Host "`n📁 Liste exportée : $exportPath" -ForegroundColor Green
}
# Désactivation des comptes
if ($doDisable) {
Write-Host "`n🚫 Désactivation des comptes inactifs..." -ForegroundColor Magenta
$inactiveComputers | ForEach-Object {
$dsmodCmd = "dsmod computer $_ -disabled yes"
Invoke-Expression $dsmodCmd
Write-Host "🔒 Désactivé : $_"
}
}
# Suppression des comptes désactivés
if ($doDelete) {
Write-Host "`n🗑 Suppression des comptes désactivés..." -ForegroundColor Red
$dsrmCmd = "dsquery computer -disabled | dsrm -noprompt"
Invoke-Expression $dsrmCmd
Write-Host "✅ Suppression effectuée (sans confirmation)."
}
Write-Host "`n✅ Script terminé." -ForegroundColor Cyan
Utilisation
- 📋 Recherche uniquement : activez
$doListing = $true
et laissez les autres en$false
. - 🔒 Désactivation uniquement : activez
$doDisable = $true
(peut être combiné avec$doListing
). - 🗑 Suppression directe : activez
$doDelete = $true
(⚠️ supprime tous les comptes désactivés). - Le fichier exporté (
.csv
) contient les noms et DNs des objets listés.
À noter
Une version PowerShell native sans dsquery
peut aussi être créée si souhaité (avec Get-ADComputer
, Disable-ADAccount
, etc.).
Le script utilise les outils en ligne de commande natifs (dsquery
, dsmod
, dsrm
), ce qui le rend compatible sur tous les serveurs AD.
Vous pouvez planifier ce script via une tâche planifiée pour automatiser le nettoyage périodique.
Comptes inactifs : Conclusion
Le nettoyage régulier des comptes ordinateurs et utilisateurs inactifs dans Active Directory est un pilier fondamental de toute stratégie de cybersécurité et de gouvernance des identités. Grâce à dsquery
, vous disposez d’un moyen simple, natif et puissant de sécuriser et rationaliser votre annuaire.