
Cikkünkhöz mellékeltük a következő állományt:
"Event.vbs" - Az első sorában található "strComputer" változóba írjunk be egy valós gépnevet és futtatása után megjeleníti a biztonsági napló bejegyzéseinek típusát.
A Windows Management Instrumentation (WMI) szolgáltatásának osztályaival, függvényeivel, metódusaival a teljes operációs rendszer programból, szkiptekből történő elérése megvalósítható. Alábbiakban az eseménynapló bejegyzéseinek lekérdezését nézzük meg.
Megjegyzés: az eseménynapló MMC konzolja a Vezérlőpult > (Teljesítmény és karbantartás) > Felügyeleti eszközök > Eseménynapló (Control Panel > (Performance and Manintenance) > Administrative Tools > Event Viewer) útvonalon érhető el.
Win32_NTLogEvent osztály
A WMI több osztálya is alkalmas az eseménynapló szolgáltatás elérésére, közülük a "Win32_NTLogEvent" felel a naplók bejegyzéseinek eléréséért. Windows NT4 SP4-től kezdve érhető el, a Windows 9x sorozat nem tartalmazza.
Adatok lekérdezése VBScript-ből
Első feladatunk - mint a WMI szkriptek esetében mindig - egy objektumkapcsolat kialakítása a szolgáltatás felé, az aktuálisan bejelentkezett felhasználó adataival. Ahhoz, hogy lekérdezzük a biztonsági napló (security log) bejegyzéseit, rendszergazdai jogosultságra lesz szükségünk. Alapvetően az eseménynapló nem a felhasználók eszköze, így azok nem is érhetik el (még a Vezérlőpult konzolját sem tudják megnyitni). Adjuk meg annak a számítógépnek a nevét az "strComputer" változóba, melynek a naplóját el szeretnénk érni. Ebből következik, hogy nem csak a helyi gépen futtatható a lekérdezés. Fontos, hogy a távoli gépen is legyen rendszergazdai jogosultságunk. A "Win32_NTLogEvent" osztály az alapértelmezett \root\cimv2 névtérben kapott helyet.
strComputer = "Dorothy"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Security)}!\\" & strComputer & "\root\cimv2")
Lekérdezzük az összes tulajdonságot (Select *) a "Win32_NTLogEvent" osztályból (from Win32_NTLogEvent), amely a biztonsági napló bejegyzéseit írja le (Where Logfile = 'Security'").
Set colLoggedEvents = objWMIService.ExecQuery ("Select * from Win32_NTLogEvent Where Logfile = 'Security'")
Az összes bejegyzés típusát ("Sikeres események naplózása", "Sikertelen események naplózása", stb.) eltároljuk a "Text" változó egy új sorába.
Text = ""
for each obj in colLoggedEvents
Text = Text + obj.Type +chr (10) + chr (13)
next
Végül az egészet megjelenítjük a képernyőn.
További tulajdonságok
A fenti szkriptben az egyes események típusát (Type) kérdeztük le. Milyen lehetőségek vannak még?
- Category = Az esemény kategóriájának kódja.
- CategoryString = A kategória szöveges tartalma (pl.: rendszeresemény, inicializálás/leállítás, de lehet, hogy nincs kategória).
- ComputerName = Ezen a gépen történt.
- Data[] = Az eseményhez tartozó bináris adatok listája.
- EventCode = Az "EventIdentifier" tulajdonság értékének alsó 16 bitje, ez jelenik meg az MMC konzolban is. Két azonos forrásból származó eseménynek lehet egyforma az "EventCode"-ja, de nem lehet azonos az "EventIdentifier" kódja.
- EventIdentifier = Fenti kód teljes tartalma.
- EventType = 1-Error, 2-Warning, 3-Information, 4-Security audit success, 5-Security audit failure (lásd: "Type")
- InsertionStrings[] = Az eseményhez tartozó, közbeékelt sztring.
- Logfile = Ebben a naplóban található az esemény (lásd a fenti szkriptet).
- Message = Az egyik leggyakrabban használt tulajdonság. Az esemény teljes leírását tárolja.
- RecordNumber = Egyedi sorszám.
- SourceName = Az esemény forrásának neve.
- TimeGenerated = Létrejöttének ideje.
- TimeWritten = Naplófájlba írásának ideje.
- Type = 1-Error, 2-Warning, 4-Information, 8-Security audit success, 16-Security audit failure. Az esemény típusát határozza meg, kompatibilitási okokból maradt meg az NT-ből, inkább az "EventType" használata javasolt.
- User = Az esemény keletkezésekor ez a felhasználó volt bejelentkezve.
Metódusok nem állnak rendelkezésre az osztályban, így törlést, létrehozást más osztályok segítségével lehet végrehajtani.