Comment lire (et afficher) la propriété Lastlogon ou lastlogoff d'un user depuis

Résolu
happexamendios Messages postés 17 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 3 août 2005 - 3 nov. 2004 à 08:15
happexamendios Messages postés 17 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 3 août 2005 - 5 nov. 2004 à 08:23
Bonjour, cela fait quelques heures que je galère pour arriver à récupérer la propriété lastlogon d'un compte user. A chaque fois on me retouorne une erreur de propriété inexistante dans le cache ou des erreurs de typage de valeur.

Je sais que cette propriété existe, mais je n'arrive pas à trouver le moindre exemple susceptible de me dire comment la lire et l'afficher. Est ce que quelqu'un aurait la gentillesse de m'aiguiller là dessus ? merci infiniment

4 réponses

happexamendios Messages postés 17 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 3 août 2005
5 nov. 2004 à 08:23
en fait j'avais bien mon code de bon, mais un petit bug bidon sur ma requête

pour ceux que ça intéresse, voici le code qui est destiné à m'afficher dans une listeview affichée en mode rapport nommée "lstliste" les comptes utilisateurs d'une OU spécifiée s'ils n'ont pas été utilisés depuis 60 jours et s'ils ont été désactivés.

la liste comporte 3 colonnes :
- Nom d'utilisateur
- durée d'inactivité du compte
- compte désactivé ?


Sub Listage_Comptes()
On Error Resume Next

Dim objCon, strQuery, strADSPath, objUser     'Déclaration des variables
Dim itmX As ListItem, Interm As String, Date_Contrôle As String
Dim Ecart_Date

strQuery = "SELECT cn, adspath  FROM 'LDAP://ou=aaa,ou=bbb,ou=ccc,dc=dc,dc=toto,dc=com' WHERE objectclass='User' AND objectcategory='Person'"  'Définition de la requête à exécuter

Set objrecset = objCon.Execute(strQuery)   'Exécution de la requête

Do While Not objrecset.EOF  'Boucle dans le recordset jusqu'à la fin du tableau
    Set objUser = GetObject(objrecset.Fields("adspath").Value)                                              'Connexion à l'objet utilisateur par le biais de son adspath
    Interm = Format(objUser.LastLogin, "dd-mm-yy")    'Récupération de la propriété "lastlogin" et formattage de type "jj-mm-aa"
    Ecart_Date = DateDiff("y", Interm, Date_Contrôle)  'Calcul du nombre de jours entre la dernière connexion et la date du jour
    
    If Ecart_Date >= 60 Then  'Si l'écart de date est supérieur à 60 jours :
        Set itmX = lstListe.ListItems.Add(, , objrecset.Fields("cn").Value)  'Ajoute le common name à la liste
        itmX.SubItems(1) = Interm   'Affichage de la date de dernière connexion dans la seconde colonne
        itmX.SubItems(2) = Ecart_Date & " jours"  'Affichage du nombre de jours sans connexion
        If objUser.AccountDisabled Then itmX.SubItems(3) = "Oui"  'Affiche si le compte est désactivé
    End If
    
    DoEvents  'Accorde du temps au processeur pour les tâches d'arrière plan
    objrecset.movenext  'passe à l'enregistrement suivant
Loop

objCon.Close 'ferme la connexion à l'Active Directory

end sub


Le code est testé et approuvé sur un site comportant environ 600 comptes utilisateurs...
3
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
3 nov. 2004 à 10:07
voici la solution, par contre mon exemple lit les comptes locaux de la machines a toi de modifier le strComputer.

place ce code dans un form et lance le :

Function WMIDateStringToDate(dtmWMIDate)
If Not IsNull(dtmWMIDate) Then
WMIDateStringToDate = CDate(Mid(dtmWMIDate, 5, 2) & "/" & _
Mid(dtmWMIDate, 7, 2) & "/" & Left(dtmWMIDate, 4) _
& " " & Mid(dtmWMIDate, 9, 2) & ":" & _
Mid(dtmWMIDate, 11, 2) & ":" & Mid(dtmWMIDate, _
13, 2))
End If
End Function

Private Sub Form_Load()
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkLoginProfile")
For Each objItem In colItems
If objItem.FullName <> "" Then
MsgBox "Full Name: " & objItem.FullName

dtmWMIDate = objItem.LastLogoff
strReturn = WMIDateStringToDate(dtmWMIDate)
MsgBox "Last Logoff: " & strReturn

dtmWMIDate = objItem.LastLogon
strReturn = WMIDateStringToDate(dtmWMIDate)
MsgBox "Last Logon: " & strReturn

MsgBox "Name: " & objItem.Name

MsgBox "Number Of Logons: " & objItem.NumberOfLogons

End If
Next
End Sub
0
happexamendios Messages postés 17 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 3 août 2005
3 nov. 2004 à 10:11
merci, je vais voir si je peux adapter ça pour lister tous les comptes de mon AD dont les lastlogon sont supérieurs à X jours...
0
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
3 nov. 2004 à 10:26
si la reponse est bonne met la en reponse acceptée
0
Rejoignez-nous