Déterminer la durée pendant laquelle l'utilisateur est connecté à Windows

StackOverflow https://stackoverflow.com/questions/13578

  •  08-06-2019
  •  | 
  •  

Question

Le besoin s'est fait sentir, dans notre produit, de déterminer depuis combien de temps l'utilisateur actuel est connecté à Windows (en particulier Vista).Il semble qu'il n'y ait pas de fonction API simple pour cela et je n'ai rien trouvé de pertinent avec WMI (même si je ne suis pas un expert en WMI, j'ai donc peut-être raté quelque chose).

Des idées?

Était-ce utile?

La solution

Pour les personnes qui ne connaissent pas WMI (comme moi), voici quelques liens :

Et voici un exemple d'interrogation de Win32_Session à partir de VBS :

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set sessions = objWMIService.ExecQuery _
   ("select * from Win32_Session")

For Each objSession in sessions
   Wscript.Echo objSession.StartTime
Next

Il alerte 6 sessions pour mon ordinateur personnel, vous pouvez peut-être filtrer par LogonType pour répertorier uniquement les utilisateurs réels ("interactifs").Je ne voyais pas comment sélectionner la session de "l'utilisateur actuel".

[modifier] et voici un résultat de Google concernant votre problème : http://forum.sysinternals.com/forum_posts.asp?TID=3755

Autres conseils

Dans Powershell et WMI, la commande d'une ligne suivante renverra une liste d'objets indiquant l'utilisateur et l'heure à laquelle il s'est connecté.

Get-WmiObject win32_networkloginprofile | ? {$_.lastlogon -ne $null} | % {[PSCustomObject]@{User=$_.caption; LastLogon=[Management.ManagementDateTimeConverter]::ToDateTime($_.lastlogon)}}

Explication:

  • Récupérer la liste des utilisateurs connectés depuis WMI
  • Filtrer tous les utilisateurs non interactifs (supprime efficacement NT AUTHORITY\SYSTEM)
  • Reformate l'utilisateur et l'heure de connexion pour plus de lisibilité

Les références:

Dans WMI, faites :"Sélectionner * dans Win32_Session" Là, vous aurez la valeur "Startime".

J'espère que cela pourra aider.

En utilisant WMI, la Win32Session est un bon début.De plus, il convient de souligner que si vous êtes sur un réseau, vous pouvez utiliser Win32_NetworkLoginProfile pour obtenir toutes sortes d'informations.

Set logins = objWMIService.ExecQuery _
   ("select * from Win32_NetworkLoginProfile")
For Each objSession in logins
   Wscript.Echo objSession.LastLogon
Next

Les autres informations que vous pouvez collecter incluent le nom d'utilisateur, la dernière déconnexion, ainsi que divers éléments liés au profil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top