Windows - Rendelkezésre álló memória figyelése

forráskód letöltése
Cikkünkben bemutatjuk egy szkript készítésének módját, mellyel a számítógépen rendelkezésre álló szabad memória mennyisége kísérhető figyelemmel. A szkript folyamatosan fog futni a háttérben csak akkor jelenít meg egy üzenetet, amikor az érték a megadott határ alá csökken. Üzenetmegjelenítés helyett indíthatunk programokat, végrehajthatunk feladatokat, leállíthatjuk a gépet vagy bármi mást, a lehetőségeknek csak a fantázia szab határt.
Mellékelten megtalálható a szóban forgó szkript "MemMonitor.vbs" néven. Változatlanul hagyva, akkor jelez, ha 336 MB alá csökkent a szabad memória mennyisége, a küszöbértéket tetszés szerint módosíthatjuk a szkript 9. sorában.
Elsőként adjuk meg, hogy hol történjen a szkript futtatása, alapértelmezésben a helyi (.) gépet használjuk, de megadható bármilyen másik a hálózaton elérhető is. Az "strComputer" változóba beírhatunk gépnevet és IP címet egyaránt.
strComputer = "."
A megadott gépen a \root\cimv2 névtérbe lépünk be az aktuálisan bejelentkezett felhasználó hitelesítési adataival (impersonationLevel=impersonate) a "winmgmts" interfészen keresztül. Utóbbi a programok és a Windows Management Instrumentation (WMI) szolgáltatás között teremt kapcsolatot.
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Az "SWbemRefresher" objektum egy konténer mely képes folyamatosan frissíteni a hozzáadott adatokat.
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Az "AddEnum" metódusával lehet hozzáadni a frissítendő objektumokat, jelen esetben a "Win32_PerfFormattedData_PerfProc_Memory" számlálót, mely a memória információit tárolja. A "Refresh" metódussal lehet frissíteni az adatokat.
Set objMemory = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet
objRefresher.Refresh
Szkriptünk folyamatosan fog futni a háttérben, hogy meddig azt mi szabályozzuk. E célból hozzunk létre egy logikai változót "DoExit" néven, adjuk neki kezdeti értékül: False.
DoExit = False
Indítunk egy Do ... Loop ciklust. Addig fut, amíg a "DoExit" értéke: False.
Do while DoExit = False
Az "intAvailableBytes" objektum "AvailableMBytes" tulajdonsága tárolja a pillanatnyilag rendelkezésre álló szabad memória mennyiségét, értékét a fenti "Refresher" objektum folyamatosan frissíti. Olvassuk ki az értékét és nézzük meg, hogy 336 MB alatt van-e.
    For each intAvailableBytes in objMemory
        If intAvailableBytes.AvailableMBytes < 336 Then
Ha igen, megjelenítünk egy szöveget a monitoron és beállítjuk a "DoExit" értékét True-ra, ami a Do ... Loop ciklus befejezést és egyben a szkript háttérben való futtatásának megszüntetését jelenti.
        Wscript.Echo "A rendelkezésre álló memória: " & intAvailableBytes.AvailableMBytes & " MB"
            DoExit = True
        End If
    Next
Ha még nem értük el a kritikus értéket, frissítsük az objektum adatokat az ismételt kiolvasás előtt.