Lister les comptes inactifs

A moins de disposer d’une politique stricte de gestion des comptes, il est monnaie courante de voir son annuaire Active Directory pollué de compte utilisateurs correspondants à des personnes qui ont quitté la société depuis longtemps.

C’est dans une optique de nettoyage de ces comptes que le script qui suit à été créé. Il se base sur la propriété Active Directory « LastLogon » pour lister les comptes inactif d’un domaine.

Il est possible de créer un CSV, et d’ignorer les comptes désactivés (qui forcement ne sont plus utilisés…).

Le script repose sur une interrogation WMI de objUser.lastLogonTimeStamp, un timestamp codé sur 8 bit, converti en date « lisible » grâce à une fonction fournie par Richard L. Mueller. Cette valeur correspond à la date de la dernière ouverture de session de l’utilisateur.

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection  

objCommand.CommandText = _
	"(infos de connexion);" & _
	"(objectCategory=Person);" & _
    "Name,distinguishedName;Subtree"

objCommand.Properties("Page Size") = 2000
objCommand.Properties("Searchscope") = 2
Set objRecordSet = objCommand.Execute  

objRecordSet.MoveFirst  

'Pour chaque User :
Do Until objRecordSet.EOF 

	dateLastLogon = Integer8Date(objUser.lastLogonTimeStamp)
	Wscript.echo objRecordSet.Fields("Name").Value & " : " & dateLastLogon

	objRecordSet.MoveNext
Loop

Un nombre de jour, définit au début du script, permet de spécifier un seuil après lequel les utilisateurs sont considérés comme inactifs. Le résultat produit (sans CSV) est le suivant :

Début de script
-============================================-
Date actuelle : 17/06/2011 15:45:40
Date limite : 19/03/2011 15:45:40
-============================================-

——————————————–
Name : Pierre
LastLogon : 29/07/2010 08:36:56 (323 jours)
Compte désactivé : non
——————————————–
Name : Paul
LastLogon : 27/08/2010 12:34:10 (294 jours)
Compte désactivé : non
——————————————–
Name : Jacques
LastLogon : 17/12/2010 10:34:21 (182 jours)
Compte désactivé : non
——————————————–

Fin de script

Télécharger le script complet.

 

Le 20/09/2012 – Remarque :

La propriété utilisée par ce script pour connaitre l’heure de la dernière ouverture de session n’est pas forcément répliquée sur tous les contrôleurs de domaine. Il faut donc vérifier l’état de la réplication de LastLogonTimeStamp avant de « croire » les informations fournies.

Pour plus d’informations : Technet – The LastLogonTimeStamp Attribute, What it was designed for and how it works.

(Merci à Sam pour l’info !)

par .

5 Commentaires

  1. zoph dit :

    Très bien, mais pourquoi ne pas utiliser le query builtin de l’active directory qui se trouve dans la console User & Computer (New Query…)

    😉

    Bisous

  2. Benjamin dit :

    Bonjour,

    Merci pour ce script plutôt pratique !

    Une question tout de même : En executant le script, j’ai des pop-up qui s’ouvrent pour chque utilisateur.

    Comment afficher le résultat dans un shell ou l’exporter en CSV ?

    Merci par avance.

    Benj

    • David dit :

      Hello !
      Pour activer la sortie en CSV, il faut remplacer la ligne
      CVSFormat = false
      par
      CVSFormat = true

      Pour éxecuter en schell, lance la commande suivante depuis une invite de commande :
      cscript //nologo List-inactive-accounts.vbs

      …Et pour sortir tout cela dans un fichier :
      cscript //nologo List-inactive-accounts.vbs > resultat.txt

      Voilà !
      David.

  3. Mike dit :

    Merci pour le script. mais quand je lance j’ai un message d’erreur:  » Provider: le tableau n’existe pas ».
    puis je avoir une solution à cette erreur.

Laisser un commentaire

*