Frage

In unserem Produkt entstand die Notwendigkeit, festzustellen, wie lange der aktuelle Benutzer bereits bei Windows (insbesondere Vista) angemeldet ist.Es scheint, dass es hierfür keine direkte API-Funktion gibt, und ich konnte mit WMI nichts Relevantes finden (obwohl ich kein WMI-Experte bin und daher möglicherweise etwas übersehen habe).

Irgendwelche Ideen?

War es hilfreich?

Lösung

Für Leute, die mit WMI nicht vertraut sind (wie ich), hier einige Links:

Und hier ist ein Beispiel für die Abfrage von Win32_Session von 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

Es werden 6 Sitzungen für meinen PC angezeigt. Vielleicht können Sie nach LogonType filtern, um nur die echten („interaktiven“) Benutzer aufzulisten.Ich konnte nicht sehen, wie man die Sitzung des „aktuellen Benutzers“ auswählen kann.

[Bearbeiten] und hier ist ein Ergebnis von Google zu Ihrem Problem: http://forum.sysinternals.com/forum_posts.asp?TID=3755

Andere Tipps

In Powershell und WMI gibt der folgende einzeilige Befehl eine Liste von Objekten zurück, die den Benutzer und die Uhrzeit seiner Anmeldung anzeigt.

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

Erläuterung:

  • Rufen Sie die Liste der angemeldeten Benutzer von WMI ab
  • Filtern Sie alle nicht interaktiven Benutzer heraus (entfernt effektiv). NT AUTHORITY\SYSTEM)
  • Formatiert die Benutzer- und Anmeldezeit zur besseren Lesbarkeit neu

Verweise:

Führen Sie in WMI Folgendes aus:"SELECT * von Win32_Session" dort haben Sie "StartTime" -Werte.

Hoffentlich hilft das.

Mit WMI ist die Win32Session ein guter Anfang.Außerdem sollte darauf hingewiesen werden, dass Sie Win32_NetworkLoginProfile verwenden können, um alle möglichen Informationen abzurufen, wenn Sie sich in einem Netzwerk befinden.

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

Zu den weiteren Informationen, die Sie sammeln können, gehören der Benutzername, die letzte Abmeldung sowie verschiedene profilbezogene Dinge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top