C# - Felhasználói fiókinformációk lekérdezése

forráskód letöltése
A WMI (Windows Management Instrumentation) segítségével programból vezérelhetjük rendszerünket, információkat kérdezhetünk le a számítógépről, valamint be is avatkozhatunk működésébe. A rendszer egy újabb lehetőségével ismerkedhetünk meg cikkünkben. A mellékelt példa segítségével gyakorlatban is megismerhetjük, hogy milyen WMI osztályt kell ahhoz elérnünk, hogy a rendszer felhasználói fiókjairól információkat szerezzünk.
A mellékelt példában a Form ListBox kontroljában jelennek meg a felhasználói fiókok információi. A fiókokkal kapcsolatban számtalan információ lekérdezhető, azonban a cikkben ezek közül csupán öt jellemzőt emelünk ki, melyek talán a legfontosabbak. Lássuk a műveletet.
A ManagementScope osztály segítségével kapcsolódhatunk a műveletvégző névtérhez.
ManagementScope msc = new ManagementScope("root\\cimv2");
A következő lépés, hogy összeállítjuk az utasítást. Ennek formája most a következő:
SELECT * FROM Win32_UserAccount WHERE Domain = <domain név>
A Domain neve a lokális gépnevet takarja.
A Win32_UserAccount osztályt fogjuk most elérni, melynek property-jei tartalmazzák az adott felhasználóra vonatkozó információkat.
string qStr = "SELECT * FROM Win32_UserAccount WHERE Domain = \"" + domain + "\"";
Szükség van egy lekérdező osztályra, mely megkapja a fent összeállított utasítást.
SelectQuery q = new SelectQuery(qStr);
Ezt követően létrehozunk egy ManagementObjectSearcher osztályt, mely abban segít bennünket, hogy az összes tulajdonságon, mint egy tömbön, végig tudjunk menni.
ManagementObjectSearcher qry;
ManagementObjectCollection qCollection;
...
qry = new ManagementObjectSearcher(msc,q);
qCollection = qry.Get();
Ezt a tömböt szolgáltatja az osztály Get függvénye.
A kollekció minden eleme elérhető ManagementObject osztályon keresztül. Az objektum esetében névvel hivatkozhatunk az egyes property-k értékére. Ezek a property-k már a jellemzőket tartalmazzák. Ezeket helyezzük el a listában.
foreach(ManagementObject mo in qCollection) 
{
  listBox1.Items.Add("Felhasználó teljes neve: " + mo["FullName"]);
  ...
}
A megoldásban a következő jellemzőket gyűjtöttük ki:
  • FullName: a felhasználó teljes neve
  • SID: biztonsági azonosító
  • Description: szöveges jellemzők
  • PasswordChangeable: megváltoztatható-e a jelszó
  • Status: a felhasználói fiók állapota