// aggiunge un riferimento a System.Management.dll al progetto.
using il sistema;
using System.Collections;
using System.Management;
using System.Text.RegularExpressions;
using System.Collections.Generic;
namespace CSharp.CodeSnippet.WMI
{
codice categoria pubblico Win32_LogonSession
{
stringa pubblica AuthenticationPackage;
stringa pubblica LogonID;
LogonEventType pubblico LogonType;
nome pubblico della stringa;
StartTime DateTime pubblico;
enum pubblico LogonEventType
{
Sistema = 0,
Interattivo,
Rete,
Gruppo,
Servizio,
Procura,
Sbloccare,
NetworkClearText,
NewCredentials,
RemoteInteractive,
CachedInteractive,
CachedRemoteInteractive,
CachedUnlock
}
lista statica pubblica GetList ()
{
la domanda della stringa = “seleziona * a partire da Win32_LogonSession„;
Ricercatore di ManagementObjectSearcher = nuovo ManagementObjectSearcher (domanda);
ManagementObjectCollection risulta = ricercatore. Ottenere ();
Elencare la lista = nuova lista (risultati. Conteggio);
Dizionario userTable = GetLoggedOnUsersTable ();
foreach (ManagementObject logonCurrent nei risultati)
{
Entrata di Win32_LogonSession = nuovo Win32_LogonSession ();
entry.AuthenticationPackage = (stringa) logonCurrent [“AuthenticationPackage„];
entry.LogonID = (stringa) logonCurrent [“LogonID„];
entry.LogonType = (LogonEventType) Convert.ToInt32 (logonCurrent [“LogonType„]);
entry.StartTime = ConvertFileTime ((stringa) logonCurrent [“StartTime„]);
se (userTable.ContainsKey (entry.LogonID))
{
entrata. Nome = (stringa) userTable [entry.LogonID];
}
lista. Aggiungere (entrata);
}
restituire la lista;
}
dizionario statico riservato GetLoggedOnUsersTable ()
{
la domanda della stringa = “seleziona * a partire da Win32_LoggedOnUser„;
Ricercatore di ManagementObjectSearcher = nuovo ManagementObjectSearcher (domanda);
ManagementObjectCollection risulta = ricercatore. Ottenere ();
Tabella del dizionario = nuovo dizionario (risultati. Conteggio);
foreach (currentObject di ManagementObject nei risultati)
{
mettere insieme il cliente = GetUser (currentObject (della stringa) [“antecedente„]);
mettere insieme la sessione = GetLogonID (currentObject (della stringa) [“dipendente„]);
tabella. Aggiungere (sessione, cliente);
}
restituire la tabella;
}
stringa statica riservata GetLogonID (propertyText della stringa)
{
mettere insieme il modello = “LogonId= \„ (? ) \ "" \ \ d+;
matchID del fiammifero = Regex.Match (propertyText, modello);
se (matchID.Success)
{
matchID.Groups di ritorno [“identificazione„]. Valore;
}
altrimenti
{
"" di ritorno;
}
}
stringa statica riservata GetUser (propertyText della stringa)
{
mettere insieme il modello = “Domain= \„ (? [\ \ D_- di A-Za-z] +) \ “|Name= \„ (? [\ \ S_- \ \ d di A-Za-z] +) \ "";
dominio = "" della stringa;
nome = "" della stringa;
foreach (fiammifero matchCurrent in Regex.Matches (propertyText, modello))
{
testo integrale della stringa = matchCurrent.Groups [0]. Valore;
se (fullText.StartsWith (“dominio„))
{
dominio = matchCurrent.Groups [“dominio„]. Valore;
}
altrimenti
{
nome = matchCurrent.Groups [“nome„]. Valore;
}
}
se (dominio. == 0 di lunghezza)
{
nome di ritorno;
}
altrimenti
{
dominio di ritorno + “\ \„ + nome;
}
}
ConvertFileTime DateTime statico riservato (tempo della stringa)
{
se (tempo! = posizione di segnale minimo)
{
stringa del const FILE_TIME_MASK = “yyyyMMddHHmmss„;
tempo = tempo. Sottostringa (0, time.IndexOf (“."));
DateTime.ParseExact di ritorno (tempo, FILE_TIME_MASK, posizione di segnale minimo);
}
DateTime.MinValue di ritorno;
}
}
}
|