HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Értesítés küldése kevés merevlemez területnél


Példaprogram letöltése

2575 bájt

Ha a merevlemezen található szabad hely mennyiség elfogy, akkor egy kiszolgáló működése megbénulhat. A rendszergazdák feladata a kapacitás folyamatos ellenőrzése. Az Intéző állandó ellenőrzése helyett mást javaslunk: készítsünk egy szkriptet, amely hálózaton keresztül ellenőrzi a megadott gépek merevlemezeit és ha valahol az általunk megadott érték alá csökken a szabad hely mennyisége, akkor küld egy E-mail-t a szintén általunk megadott címre. További javaslatunk: az E-mail mobiltelefonra irányítása - esetleg SMS formájában - az azonnali tájékoztatás érdekében.

Cikkünkhöz mellékeltük az alábbi szkriptet "LowDiskAlarm.vbs" néven. Futtatása előtt meg kell változtatni az első sorában található "Computer" változó tartalmát a valós, ellenőrizendő gép nevét beírva. Élesben történő alkalmazása előtt a "valaki@valahol.hu" E-mail cím megváltoztatása is szükséges. Erre a címre megy a riasztási üzenet.
A megvalósítás rögtön felvet egy problémát: hogy ellenőrizzük egy tetszőleges hálózati gép saját merevlemezét. A megosztott könyvtárak és meghajtók vizsgálata nem célravezető, mert lehet, hogy nincs is ilyen - ha a gép csak Webszerver. Megoldás a Windows Management Instrumentation (WMI) szolgáltatásban rejlik: kapcsolódjuk a távoli gép /root/cimv2 névteréhez és olvassuk ki a "Win32_Logicaldisk" objektum számunkra szükséges tulajdonságait. Így ugyanúgy tudunk dolgozni, mint ha a saját gépünkön lennénk.
Első lépésben hozzunk létre néhány változót: "Computer" - ide írjuk az ellenőrizendő számítógép nevét vagy IP címét, "MinFreeSpace" - a küszöbérték tárolására MB-ban, amikor az E-mail küldése megtörténik, "Text" - az E-mail szövegét fogja alkotni az eredmények függvényében még változtatunk rajta.
Computer="Manka"
MinFreeSpace=200
Text="A(z) "+Computer+" gép merevlemezén a szabad hely " & MinFreeSpace & " MB alá csökkent" & Chr (13) & Chr (13)
Most következik a legösszetettebb programsor: a WMI elérése. A kapcsolatot a "WinMgmts" interfészen keresztül hozzuk létre a "GetObject" metódussal. A távoli gép rendszerobjektumainak eléréséhez felhasználói névre és jelszóra lesz szükség, küldjük el az aktuálisan bejelentkezett felhasználó adatait (impersonationLevel=impersonate). Adjuk meg az elérendő gép nevét, amit a "Computer" változóban tároltunk. Ha csak gépnevet adunk meg, akkor az adott gép alapértelmezett WMI névteréhez csatlakozunk. Általában ez a /root/cimv2, de nem lehetünk benne biztosak, hogy az adott gépen is az, ezért írjuk be. A gépben lévő minden háttértárolóról a "Win32_LogicalDisk" osztály tárol adatokat. A meghajtóbetűjel a "Name", a szabad terület mérete a "Freespace" tulajdonságokban tárolódik. Nem elég csak ezeket lekérdezni, mert a floppy, CDROM és egyéb meghajtók adatait is visszakapjuk. CDROM esetében mindig 0 a szabad hely, ezért felesleges riasztásokat adna a szkript. Ellenőrizzük a "DriveType" tulajdonságot és csak a 3-as számmal ellátottakkal foglalkozzunk: minden helyi merevlemez kötet és csak ezek, 3-as típussal vannak jelölve. Vegyük figyelembe, hogy a "Freespace" bájtban adja vissza a terület nagyságát és mi a "MinFreeSpace" változónkban MB-ot adtunk meg.
Set Disks=GetObject("WinMgmts:{impersonationLevel=impersonate}!\\"+Computer+"/root/cimv2").ExecQuery ("SELECT Name, Freespace, DriveType FROM Win32_LogicalDisk where (Freespace<" & MinFreeSpace*1000000 & ") and (DriveType=3)")
Iktassunk be még egy segédváltozót, annak ellenőrzésére, hogy kell-e riasztást küldeni. Ha igen, akkor növeljük az értékét eggyel. Egy FOR ciklussal nézzük végig a "Win32_LogicalDisk" osztálypéldányait. Pontosan annyi van belőlük, ahány merevlemezkötet az adott gépen (a "DriveType" szűrés miatt). Ismét figyelnünk kell a bájt és megabájt közötti különbségre. Bővítsük a "Text" változót, ami az E-mail szövege lesz, a visszakapott adatokat elhelyezve benne.
Count=0
for each Disk in Disks
   Text = Text & "Meghajtóbetűjel: " & Disk.Name & " , szabad hely:" & Round (Disk.Freespace/1000000) & " MB" & Chr (13)
   Count=Count+1
Next
Csak akkor riasztunk, ha a "Count" értéke nagyobb nullánál. Az E-mail-t az Outlook-al fogjuk küldeni, ehhez létre kell hozni egy üres üzenetet (CreateObject("Outlook.Application")). A cél E-mail cím az objektum "To" tulajdonságába kerül, a tárgy a "Subject"-be, az üzenet szövegét a "Body" tárolja. Végül a "Send" metódussal adható át a teljes levél az Outlook számára elküldésre.
if Count>0 then
  Set FApplication = WScript.CreateObject("Outlook.Application")
  Set FMailItem=FApplication.CreateItem(olMailItem)
   FMailItem.To="valaki@valahol.hu"
   FMailItem.Subject="A(z)" + Computer +" kiszolgálón a kritikus szint alá csökkent a merevlemez terület."
   FMailItem.Body=Text
   FMailItem.Send
end if
Hogy lehet a szkriptet futtatni? Egyszerűen helyezzük el az ütemezett feladatok közé, így a futtatásához még be sem kell jelentkezni. Említettük, hogy minden esetben az aktuálisan bejelentkezett felhasználó nevével és jelszavával történik a távoli gép elérése, ezért a feladatütemezőben ennek megfelelően állítsuk be hitelesítési adatokat.

Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2002 évkönyv 279. oldal

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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |