// ajoutent une référence à System.Management.dll au projet.
using le système ;
using System.Collections ;
using System.Management ;
using System.Text.RegularExpressions ;
using System.Collections.Generic ;
namespace CSharp.CodeSnippet.WMI
{
classe publique Win32_LogonSession
{
corde publique AuthenticationPackage ;
corde publique LogonID ;
LogonEventType public LogonType ;
nom public de corde ;
StartTime date-heure public ;
enum public LogonEventType
{
Système = 0,
Interactif,
Réseau,
Groupe,
Service,
Procuration,
Ouvrir,
NetworkClearText,
NewCredentials,
RemoteInteractive,
CachedInteractive,
CachedRemoteInteractive,
CachedUnlock
}
liste statique publique GetList ()
{
la question de corde = « choisissent * à partir de Win32_LogonSession » ;
Chercheur de ManagementObjectSearcher = nouveau ManagementObjectSearcher (question) ;
ManagementObjectCollection résulte = chercheur. Obtenir () ;
Énumérer la liste = nouvelle liste (résultats. Compte) ;
Dictionnaire userTable = GetLoggedOnUsersTable () ;
foreach (ManagementObject logonCurrent dans les résultats)
{
Entrée de Win32_LogonSession = nouveau Win32_LogonSession () ;
entry.AuthenticationPackage = (corde) logonCurrent [« AuthenticationPackage »] ;
entry.LogonID = (corde) logonCurrent [« LogonID »] ;
entry.LogonType = (LogonEventType) Convert.ToInt32 (logonCurrent [« LogonType »]) ;
entry.StartTime = ConvertFileTime ((corde) logonCurrent [« StartTime »]) ;
si (userTable.ContainsKey (entry.LogonID))
{
entrée. Nom = (corde) userTable [entry.LogonID] ;
}
liste. Ajouter (entrée) ;
}
renvoyer la liste ;
}
dictionnaire statique privé GetLoggedOnUsersTable ()
{
la question de corde = « choisissent * à partir de Win32_LoggedOnUser » ;
Chercheur de ManagementObjectSearcher = nouveau ManagementObjectSearcher (question) ;
ManagementObjectCollection résulte = chercheur. Obtenir () ;
Table de dictionnaire = nouveau dictionnaire (résultats. Compte) ;
foreach (currentObject de ManagementObject dans les résultats)
{
ficeler le compte = le GetUser (currentObject (de corde) [« antécédent »]) ;
ficeler la session = le GetLogonID (currentObject (de corde) [« personne à charge »]) ;
table. Ajouter (session, compte) ;
}
renvoyer la table ;
}
corde statique privée GetLogonID (propertyText de corde)
{
ficeler le modèle = « LogonId= \ » (? ) \ \ d+ \ "" ;
matchID d'allumette = Regex.Match (propertyText, modèle) ;
si (matchID.Success)
{
matchID.Groups de retour [« identification »]. Valeur ;
}
autrement
{
"" de retour ;
}
}
corde statique privée GetUser (propertyText de corde)
{
ficeler le modèle = « Domain= \ » (? [\ D'A-Za-z \ d_-] +) \ « |Name= \ » (? [\ \ D'A-Za-z \ d \ s_-] +) \ "" ;
domaine = "" de corde ;
nom = "" de corde ;
foreach (allumette matchCurrent dans Regex.Matches (propertyText, modèle))
{
texte intégral de corde = matchCurrent.Groups [0]. Valeur ;
si (fullText.StartsWith (« domaine »))
{
domaine = matchCurrent.Groups [« domaine »]. Valeur ;
}
autrement
{
nom = matchCurrent.Groups [« nom »]. Valeur ;
}
}
si (domaine. == 0 de longueur)
{
nom de retour ;
}
autrement
{
domaine de retour + « \ \ » + nom ;
}
}
ConvertFileTime date-heure statique privé (temps de corde)
{
si (temps ! = nulle)
{
corde de const FILE_TIME_MASK = « yyyyMMddHHmmss » ;
temps = temps. Sous-chaîne (0, time.IndexOf (« .")) ;
DateTime.ParseExact de retour (temps, FILE_TIME_MASK, nulle) ;
}
DateTime.MinValue de retour ;
}
}
}
|