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

happexamendios 17 Messages postés mardi 20 juillet 2004Date d'inscription 3 août 2005 Dernière intervention - 3 nov. 2004 à 08:15 - Dernière réponse : happexamendios 17 Messages postés mardi 20 juillet 2004Date d'inscription 3 août 2005 Dernière intervention
- 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
Afficher la suite 

4 réponses

Meilleure réponse
happexamendios 17 Messages postés mardi 20 juillet 2004Date d'inscription 3 août 2005 Dernière intervention - 5 nov. 2004 à 08:23
3
Merci
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...

Merci happexamendios 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

thierrydelepine 521 Messages postés mardi 24 décembre 2002Date d'inscription 11 septembre 2008 Dernière intervention - 3 nov. 2004 à 10:07
0
Merci
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
happexamendios 17 Messages postés mardi 20 juillet 2004Date d'inscription 3 août 2005 Dernière intervention - 3 nov. 2004 à 10:11
0
Merci
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...
thierrydelepine 521 Messages postés mardi 24 décembre 2002Date d'inscription 11 septembre 2008 Dernière intervention - 3 nov. 2004 à 10:26
0
Merci
si la reponse est bonne met la en reponse acceptée

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.