HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Nyomtatási feladatok törlése szkriptekből


Példaprogram letöltése

389 bájt

Ha egy nyomtató szerverre vagy akár csak egy egyszerű kliens gépre nagy és sok nyomtatási feladatot küldenek, előfordulhat, hogy túlságosan sok adat lesz a várakozási sorban, aminek súlyos következményei lehetnek. Az alábbiakban bemutatunk egy Visual Basic szkriptet, mellyel törlünk minden 1 MB-nál nagyobb feladatot, felszabadítva a várakozási sort.

Cikkünkhöz mellékeltük a szóban forgó szkriptet "DeletePrintJob.vbs" néven. Futtatása nem igényel módosítást a forráskódban.
Az alábbiak csak Windows XP-n és a .NET szerver változatokon hajthatók végre.
Milyen következményekkel járhat a várakozási sor túlterhelése?
A nyomtatók várakozási sora alapértelmezésben a %systemroot%\system32\spool mappában található, ami a rendszerköteten van. Sokan gondolják úgy, hogy az operációs rendszert felrakják egy adott kötetre és az adataikat egy másikra. Értelemszerűen az elsőn csak annyi helyet hagynak, hogy a Windows még kényelmesen elférjen. Csakhogy amennyiben ez a gép nyomtató kiszolgálóként működik (nem kell szervernek lennie ehhez, jó a munkaállomás is) a nyomtatásra küldött adatok a rendszerkötetre kerülnek átmeneti tárolásra és ezzel a kötet könnyen betelhet, ami az operációs rendszer működésképtelenségéhez vezethet.
Mit lehet tenni ez ellen? Egyrészt áthelyezhető a várakozási sor egy másik kötetre (lásd a kapcsolódó cikkeket), másrészt tüneti kezelésként írhatunk egy szkriptet, amely törli a nagyobb feladatokat, ezzel helyet szabadítva fel és újra működőképessé téve az operációs rendszert.
Nyomtatási feladatok törlése
Határozzuk meg, hogy melyik gép nyomtatási sorában kívánunk adatokat törölni. Ha pontot (.) adunk meg gépnév vagy IP cím helyett, a helyi gépen hajtjuk végre a műveletet.
strComputer = "."
Csatlakozzunk a megadott gép WMI (Windows Management Instrumentation) szolgáltatásához a "winmgmts" interfészen keresztül.
Set objWMIService = GetObject("winmgmts:" _
A csatlakozás az aktuálisan bejelentkezett felhasználó nevében történik (impersonationLevel=impersonate), ezért fontos, hogy elégséges jogokkal rendelkezzük, mind a helyi, mind a távoli gépen. A WMI alapértelmezett \root\cimv2 névterében található a később elérni kívánt osztály.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Futtatunk egy WQL (WMI Query Language) lekérdezést.
Set colPrintJobs =  objWMIService.ExecQuery _
Lekérjük a "Win32_PrintJob" osztály összes olyan elemét (nyomtatási feladatát), melyek mérete meghaladja az 1 MB-ot (Size > 1000000).
    ("Select * from Win32_PrintJob Where Size > 1000000")
A kapott eredményt egy FOR ciklussal feldolgozzuk.
For Each objPrintJob in colPrintJobs 
És futtatjuk a visszakapott objektumokon a "Delete_" metódust, törölve ezzel őket.
    objPrintJob.Delete_
Zárjuk a ciklust.
Next
Végül megjelenítünk a képernyőn egy feliratot, hogy tudjuk mikor futott le a szkript.
Wscript.echo "Kész."

Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2003 évkönyv 221. 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 |