Windows - Feladatütemezés szkriptből

forráskód letöltése
A "Feladatütemező" ("Schedules Tasks") szolgáltatás segítségével programokat futtathatunk az általunk megadott időpontokban. Új feladatot több módszerrel hozzá lehet adni: legegyszerűbben a grafikus felület segítségével, de parancssorból az AT utasítás szintén alkalmas rá és végül, de nem utolsósorban programokból is. Alábbiakban az utóbbi megoldásra nézünk egy példát.
Cikkünkhöz mellékeltük az alábbi szkriptet "schedule.vbs" néven. Futtatása után létrejön egy új ütemezett feladat "At1" néven, mely hétfőn, szerdán és pénteken, 20:15-kor futtatja az MSPAINT programot.
A Feladatütemező ("Schedules Tasks") szolgáltatás programokból történő használatához az operációs rendszer, beépített metódusokon és tulajdonságokon keresztül nyújt támogatást. Nincs szükség rendszer közeli függvények meghívására, viszonylag egyszerű lépésekkel, gyakorlatilag bármelyik programozási nyelvből meghívhatjuk az alábbi komponenseket, példánkban ezt VBScript-ből tesszük.
A feladatütemezés - a legtöbb WMI (Windows Management Instrumentation) szolgáltatáshoz hasonlóan - hálózatos funkciókkal is el van látva, ezért első lépésként meg kell adnunk, hogy melyik gépen futtatjuk. Az "strComputer" változóba egy pontot (.) elhelyezve az aktuális gépen fut, de a pont helyére egy másik gép nevét vagy IP címét írva, azon is futtatható.
strComputer = "."
Csatlakozzunk a megadott gép WMI szolgáltatásához a "winmgmts" interfészen keresztül. 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.
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Az osztály neve: "Win32_ScheduledJob", feladata az ütemező szolgáltatás kezelése. Létesítsünk kapcsolatot vele.
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
Új feladatot a "Create" metódus paraméterezett meghívásával lehet felvenni, melyek sorrendben a következők:
  • Futtatandó program, pl.: "mspaint.exe" vagy "notepad.exe c:\xy.txt".
  • Futtatás ideje UTC szintaxis szerint (YYYYMMDDHHMMSS.MMMMMM(+-)OOO), ahol az YYYYMMDD szakaszt ******** karakterekkel kell helyettesíteni, pl.: ********121500.000000-420.
  • Ha a következő paraméter értéke: TRUE, akkor a megadott időben ismétlődve fut a feladat, ha FALSE, akkor csak egyszer.
  • Ezután következik, hogy a futtatás a hét mely napjain történjen (1 = hétfő, 2 = kedd, 4 = szerda, 8 = csütörtök, 16 = péntek, 32 = szombat, 64 = vasárnap). Ha hétfőn, szerdán és pénteken, akkor a következőt kell beírni: 1 OR 4 OR 16.
  • Meg lehet azt is adni, hogy a hónap mely napjain történjen a futtatás, de csak akkor, ha beállítottuk az ismételt végrehajtást (3. paraméter).
  • Ha a következő érték TRUE, akkor előtérben (mint egy hagyományos program), ha FALSE, akkor a háttérben történik a futtatás.
  • Végül a "JobID" változó a feladat egyedi azonosítóját tárolja.
Tároljuk el a metódus visszatérési értékét az "errJobCreated" változóba.
errJobCreated = objNewJob.Create("mspaint.exe", "********121500.000000-420", True , 1 OR 4 OR 16, , True, JobID) 
Dolgozzuk fel a változó tartalmát: amennyiben nulla a visszatérési értéke, minden rendben zajlott.
if errJobCreated = 0 then 
 Wscript.Echo "Ütemezett feladat felvéve."
Ha ettől eltérő, akkor hiba lépett fel, ez esetben kiíratjuk a hibakódot.
else
 Wscript.Echo "Hiba történt! A hibakód:" & errJobCreated
end if
Futtassuk a szkriptet és próbáljuk ki, hogy valóban felvette-e a kért feladatot a listába:
Nyissuk meg a Kellékek > Rendszereszközök > Ütemezett feladatok (Accessories > System Tools > Scheduled Tasks) menüvel a szolgáltatás kezelőablakát és ellenőrizzük, hogy létrejött-e egy feladat "At1" néven. Ha ismételten futtatjuk a szkriptet, kapunk még egy feladatot "At2" néven, majd "At3" néven és így tovább.