Entwickler-Ecke

Sonstiges (.NET) - Aktive Benutzer auslesen


3marci - Mi 24.08.11 10:12
Titel: Aktive Benutzer auslesen
Hallo Community,

Ich möchte per C# alle aktiv angemeldeten Benutzer auslesen.
Per CMD habe ich die Funktion qwinsta die mir das zur Verfügung stellt.
Ich habe bereits mehrere Lösungsansätze gesehen wie das in C# funktioniert, dabei wurden die Benutzer per Process.Start("cmd.exe", "qwinsta > user.txt"); in die Textdatei geschrieben und dann eben wieder im Programm eingelesen.
Aber das scheint mir sehr umständlich zu sein... hat jemand eine bessere Idee??


Th69 - Mi 24.08.11 11:04

Hallo 3marci,

Stichwort: WMI, s. http://msdn.microsoft.com/en-us/library/aa392727(v=vs.85).aspx#_hmm_users (Win32_UserAccount müßte die dafür richtige Klasse sein).
C#-Beispiele mit WMI gibt es zahlreiche, z.B. mein kürzlich erstellter Beitrag http://www.c-sharp-forum.de/viewtopic.php?p=647377#647377 ;-)
Um die gerade angemeldeten User zu erhalten, müßtest du mal die Properties der WMI-Klasse ausprobieren (ich tippe auf "Lockout").


3marci - Mi 24.08.11 14:43

Vielen Dank.

Ich habe das ganze jetzt ein bisschen anders gelöst, hier ist meine Methode aus einer anderen Homepage... ein bisschen modifiziert dass es für meine Verwendung passt:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
private void GetAllUsers()
{
  ManagementScope managementScope = new ManagementScope();
  ObjectQuery sessionQuery = new ObjectQuery("SELECT * FROM Win32_LogonSession WHERE LogonType = 10");
  ManagementObjectSearcher sessionObjectSearcher = new ManagementObjectSearcher(managementScope, sessionQuery);
  ManagementObjectCollection sessionObjectCollection = sessionObjectSearcher.Get();

  foreach (ManagementObject sessionObjectItem in sessionObjectCollection)
  {
    ObjectQuery associatorQuery;
    ManagementObjectSearcher associatorObjectSearcher;
    ManagementObjectCollection associatorObjectCollection;


    string logonId = sessionObjectItem["LogonId"as string;

    associatorQuery = new ObjectQuery(string.Concat("Associators of {Win32_LogonSession.LogonId=", logonId, "}Where AssocClass=Win32_LoggedOnUser Role=Dependent"));
    associatorObjectSearcher = new ManagementObjectSearcher(managementScope, associatorQuery);
    associatorObjectCollection = associatorObjectSearcher.Get();

    foreach (ManagementObject i in associatorObjectCollection)
    {
      userNames.Add(i["Name"].ToString());
    }
  }
}