Windows - Szabad lemezterület ellenőrzés a WMI segítségével

WMI 13. rész

forráskód letöltése
A merevlemezek kapacitásának folyamatos növekedése ellenére is előfordulhat, hogy egyszer csak elfogy a szabad hely. Annak érdekében, hogy ez ne érjen váratlanul senkit a Windows folyamatosan figyel és szükség szerint értesíti a felhasználót. Cikkünkben bemutatjuk, hogy lehet ezt az automatikus szolgáltatást letiltani, illetve a Windows Management Instrumentation (WMI) segítségével egy szkriptből saját ellenőrzést készíteni.
Cikkünkhöz mellékeltünk egy registry import állományt "DisableCheckLowDiskSpace.reg" néven. Futtatása után letiltja az aktuális felhasználó esetében a szabad terület automatikus ellenőrzését. Továbbá megtalálható az alábbiakban bemutatásra kerülő VB szkript, amely ellenőrzi az összes merevlemez kötetet és figyelmeztet, ha valamelyiken az összes hely 20%-a alá csökken a szabad terület mennyisége.
Ha egy köteten lévő szabad terület mennyisége bizonyos szintek alá csökken, akkor a Windows XP megjelenít egy figyelmeztető feliratot és lehetőséget biztosít a "Lemezkarbantartó" ("Disk Cleanup Wizard") segédprogram elindítására. A figyelmeztetés a következő esetekben és időtartamban jelenik meg:

  • Ha a szabad hely mennyisége 200 MB alá csökken, akkor 10 másodpercre egy munkamenet alatt egy alkalommal.
  • Ha a szabad hely mennyisége 80 MB alá csökken, akkor 30 másodpercre, négyóránként egy munkameneten belül kétszer.
  • Ha a szabad hely mennyisége 50 MB alá csökken, akkor 60 másodpercre, 5 percenként, egészen addig, amíg 50 MB alatt van az érték.
A gond akkor adódik, ha eleve kis méretű kötettel dolgozunk ekkor célszerű a figyelmeztetést kikapcsolni. Ezt a regisztrációs adatbázisban meg is tehetjük. Hozzunk létre egy új duplaszó (REG_DWORD) típusú bejegyzést a következő helyen:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
A bejegyzés neve legyen: "NoLowDiskSpaceChecks", értéke pedig: 1. Látható, hogy a létrehozás csak az aktuális felhasználóra (HKEY_CURRENT_USER) vonatkozik, így más felhasználók bejelentkezésekor az alapértelmezés szerint továbbra is megjelenik a figyelmeztetés. (A registry szerkesztéséhez használjuk a REGEDIT.EXE programot.)
A WMI szolgáltatáson keresztül is lekérdezhető a szabad lemezterület mennyisége. Készítsünk egy szkriptet, amely ellenőrzi az összes merevlemez meghajtó összes kötetét és amennyiben valamelyiken a szabad hely nem éri el az összes kapacitás 20 százalékát, kiírja a betűjelét.
A rendszerben lévő kötetek tulajdonságait a "Win32_LogicalDisk" osztály tartalmazza. Feladatunk rögtön felvet egy problémát is: el kell dönteni, hogy az adott kötet merevlemezen van-e. Ha nem (pl.: CD-n), akkor gond lehet a szabad hely megállapításával és felesleges figyelmeztetéseket kapunk. A problémát a "Win32_LogicalDisk" osztály "DriveType" tulajdonságának ellenőrzésével lehet megoldani. Ha az értéke 3, akkor merevlemezen található a kötetet, ha ettől eltérő, akkor más eszközön CD-n, floppyn, stb. A százalékos érték meghatározásához ismerni kell a szabad hely mennyiségét és a kötet méretét. Előbbi a "Freespace", utóbbi pedig a "Size" paraméterben tárolódik. A meghajtó betűjel a "Name" tulajdonságban található meg.
Set DiskSet = GetObject ("winmgmts: {impersonationLevel = impersonate}").ExecQuery ("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3")
A lekérdezés a rendszerben található összes merevlemezkötet kért adatait adja eredményül. Jó eséllyel nem csak egyről van szó, ezért egy FOR ciklust alkalmazunk. A 20 %-os küszöbértéket a szabad és az összes terület hányadosával kapjuk meg. Ha ez 0.2-nél kevesebb, akkor jelenítsük meg a kötet betűjelét ("Name"), egy rövid magyarázó szövegbe ágyazva.
for each Disk in DiskSet
   If (Disk.FreeSpace/Disk.Size) < 0.2 Then 
      WScript.Echo "A következő meghajtón: " + Disk.Name + " a szabad lemezterület mennyisége 20% alá csökkent."
   End If
Next

WMI cikksorozat