Windows - Hozzáférés az Eseménynaplóhoz VBScript-ekből

forráskód letöltése
Program és konfigurálási hibák, hacker támadások, felhasználói tevékenységek illetve szolgáltatások nyomkövetésénél és számos további esetben jó hasznát vehetjük az "Eseménynapló" ("Event Viewer") szolgáltatásnak. Kombináljuk össze a Windows Scripting Host (WSH) nyújtotta lehetőségekkel és kérjük le a minket érintő eseményeket egyetlen parancsikon segítségével.
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.
wscript.echo Text
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.