|
|
Active Directory felhasználók utolsó bejelentkezésének lekérdezése
|
|
Példaprogram letöltése
2474 bájt
|
Cikkünkben készíteni fogunk egy VBScriptet, amelyet a hálózat egy tetszőleges gépén futtatva lekérdezhető az Active Directory kiszolgálójáról, hogy ki mikor jelentkezett be utoljára a tartományba.
Cikkünkhöz mellékelve megtalálható a példában szereplő szkript "LastLogin.vbs" néven. Felhasználásához a harmadik sorban található "DName" változónak adjuk értékül a lekérdezendő tartomány nevét, a hatodik sorban lévő "DC" változónak pedig a tartományvezérlő gépnevét. Ezek után a szkriptet futtatva, generál egy listát a tartomány felhasználóiról, az utolsó bejelentkezés dátumáról és idejéről. Figyelem! Ne az Intéző-ből (Explorer) futtassuk, hanem parancssorból a CSCRIPT.EXE programmal (erről részletek a cikk végén).
Az első eldöntendő kérdés: hogy fogunk a címtárhoz kapcsolódni szkriptből? Több lehetőségünk is van az ADSI-n (Active Directory Scripting Interface) belül: WINNT, LDAP, NDS, NWCOMPAT. Az utolsó kettőt nyugodtan elvethetjük, mert azokkal Novell címtárakhoz lehet csatlakozni. Marad két lehetőség, mi ezek közül a WINNT-t fogjuk használni. Mi ez? Egy úgynevezett "Provider" (=kb. ellátó), ami kapcsolatot képes létrehozni a Windows NT4.0 PDC-vel (Primary Domain Controller) és BDC-vel (Backup Domain Controller), továbbá nem natív üzemmódban működő Windows 2000 szerverekkel. Van egy fontos apróság vele kapcsolatban: a kis és nagybetűket különbözőnek értelmezi, ezért szkriptben így írandó: "WinNT". Az objektumokat a következő módon címzi meg: //Tartománynév/Kiszolgálónév/Objektum,Osztály. Nekünk csak a "User" objektumra van szükségünk az osztályt el is hagyhatjuk.
Lássuk a szkriptet, a Jegyzettömb (Notepad) programot javasoljuk a szerkesztéséhez:
Hozzunk létre mindjárt az elején egy változót, ahol a tartománynevet tároljuk, később ezt használva nem kell mindig megadni.
'Tartománynév:
DName = "Animare"
Ugyanígy egy másik változót a gépnévnek (lásd WinNT címzési szintaxisa).
'Tartományvezérlő:
DC = "Kentaur"
A lekérdezés során előfordulhat, hogy nem kapunk meg egy értéket, mert nem létezik, ekkor megszakadna a futás, ezért az ilyen eseteket figyelmen kívül kell hagyni.
Hozzákapcsolódunk a tartományhoz és az egyik elérhető tartományvezérlőről lekérjük a "User" objektumot. (A leggyorsabban válaszoló tartományvezérlő fog a szkriptünkkel kommunikálni.)
Set Domain = GetObject("WinNT://" + DName)
Domain.Filter = Array("User")
Készítünk egy táblázat fejlécet a jobb áttekinthetőség kedvéért.
WScript.Echo "--------------------------------------------------------------------"
WScript.Echo "Tartomány: " + DName
WScript.Echo "Tartományvezérlő: " + DC + vbNewLine
WScript.Echo "Bejelentkezés név [Teljes név]" + Space(13) + "Utolsó bejelentkezés"
WScript.Echo "--------------------------------------------------------------------"
Ciklusban lekérdezzük a "User" objektum minden elemét.
For Each DomainItem In Domain
Az "LLogin" változó fogja tárolni az utolsó bejelentkezés idejét.
LLogin = DomainItem.LastLogin
Csak akkor hajtjuk végre a lekérdezést, ha legalább 1 felhasználó van.
If UBound(sObjects) >= 1 Then
1-től a felhasználók számáig indítunk még egy ciklust.
For t = 1 To UBound(sObjects)
Lekérjük az adott felhasználót, mint objektumot.
Set User = GetObject("WinNT://" + DName + "/" + DC + "/user")
A felhasználói objektum "LastLogin" tulajdonsága tárolja az utolsó bejelentkezés időpontját. Ha van ilyen az "LLogin" változó felveszi az értékét.
If User.LastLogin > LLogin Then LLogin = User.LastLogin
Next
End If
Ha az "LLogin=0" tehát nem volt bejelentkezési időpont, akkor kiírjuk a felhasználó bejelentkezési nevét, teljes nevét és időpontnak, hogy "nincs".
If LLogin =0 Then
WScript.Echo Left(DomainItem.Name + " [" +DomainItem.FullName + "]" + Space(43),43) + "nincs"
Else
Ellenkező esetben a "nincs" helyett az időpontot jelenítjük meg.
WScript.Echo Left(DomainItem.Name + " [" +DomainItem.FullName + "]" + Space(43),43) +
FormatDateTime(LLogin)
End if
Végül töröljük a bejelentkezés idejét.
Az elkészült fájlt mentsük el "LastLogin.vbs" néven.
A szkriptet parancssorban való futtatásra írtuk meg. Ennek oka, hogy így a legegyszerűbb fájlba menteni a kimenetét. Bár futtatható grafikus módban is (ekkor az Intézőben (Explorer) indítsuk el), de minden egyes sort külön ablakban fogunk látni.
Indítsunk el egy parancssori ablakot (WIN+R > cmd), tallózzunk el arra a helyre, ahová mentettünk és írjuk be:
cscript LastLogin.vbs //nologo
A "//nologo" paramétert azért használjuk, hogy ne írja ki a CSCRIPT adatait futtatás után.
Ha a kimenetet egy szövegfájlba akarjuk menteni, használjuk a következőképpen a parancsot:
cscript LastLogin.vbs //nologo > UserLogin.txt
|
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|