C# - Programok futtatása és e-mail üzenetek küldése parancsállományokkal

Windows Script Host lehetőségei 4. rész

forráskód letöltése
Cikksorozatunk mai számában megismerkedhetünk a WScript.exe és CScript.exe programok kapcsolóival, valamint bemutatjuk, hogy milyen módon készíthetünk konfigurációs állományt (.wsh) egy parancsállományhoz a Windows Intéző segítségével. A mellékelt példában szemléltetjük, hogy miként kezelhetők a JScript parancsállományokban keletkező futásidejű kivételek. Érdekességként mutatunk egy példát arra, hogy néhány soros script-el hogyan küldhetünk e-mail üzeneteket.
A mellékelt program e-mail küldését végző funkciójának használatához rendelkeznünk kell a hálózatban elérhető SMTP kiszolgálóval.
Kapcsolók ismertetése
A WScript.exe és CScript.exe programok, melyekkel parancssorból futtathatjuk a parancsállományokat, rendelkeznek néhány kapcsolóval, melyek használatával bizonyos viselkedésekre utasíthatjuk őket. Ezeket foglalja össze a következő táblázat:
Kapcsoló Leírás
//B A parancsállomány Batch módban futtatható, vagyis rejtve marad a konzol, és nem jelennek meg a script-hibák sem.
//X Debug módban futtatja a script-et. A script futásának kezdetén felkínálja a rendszer, hogy melyik Visual Studio.NET példányban kívánjuk futtatni a hibakeresést. A környezet valamennyi debug funkciója használható, beleértve a Watch funkciót is.
//E: <feldolgozó neve> A specifikált script-motort használja a parancsállomány futtatásához.
//H:CScript vagy //H:Wscript Meghatározza, hogy melyik futtatóprogram legyen a parancsállományhoz társított, alapértelmezett program. Ha nincs megadva, akkor a Wscript.exe az alapértelmezett.
//I A //B kapcsoló ellentéte, vagyis a parancsállomány interaktív módban fut.
//logo Alapértelmezett érték, a //nologo ellentéte, vagyis futási időben egy embléma jelenik meg.
//nologo Nem jelenik meg az embléma.
//S Az aktuális parancssori opciók mentése az aktuális felhasználó számára.
//T: <másodperc> Megadható, hogy hány másodpercig futhat a script. Alapértelmezésben nincs időkorlát. Ezzel elkerülhető, hogy a script futáskor – valamilyen hiba miatt – végtelen ciklusba kerüljön, és feleslegesen foglaljon erőforrásokat. Időtúllépés esetén a futtató meghívja a IActiveScript::InterruptThread metódust, és a process terminál.
//U Windows NT, és Windows 2000 operációs rendszerekben megadható, hogy a kimenet Unicode formátumban jelenjen meg.
//? A használható kapcsolók, és opciók listája jelenik meg egy üzenetpanelen.
//D Aktív hibakeresés engedélyezése.
//JOB: <feladatnév> Feladat végrehajtása .wsf állományokban megvalósított feladatok közül.
.WSH állományok készítése parancsállományokhoz
A parancsállományok futtathatók kapcsolókkal, melyek megadása elég fárasztó lehet, ha minden futtatáskor változtatnunk kell. Ennek elkerülése érdekében néhány mozdulattal készíthetünk egy, a parancsállománnyal azonos nevű, de .wsh kiterjesztésű parancsállományt. Ehhez tegyük a következőket:
  • A parancsállomány nevén kattintsunk a jobb egérgombbal a Windows Intézőben.
  • A felbukkanó panelen válasszuk a SCRIPT fület.

  • Adjuk meg a script paramétereit, majd nyomjuk meg az OK gombot. Ekkor létrejön a .wsh állomány.
A konfigurációs állomány [ScriptFile] bejegyzésében a Path kulcsban jelenik meg a parancsállomány aktuális elérési útvonala, az [Options] bejegyzés alatt pedig megtaláljuk a panelen beállított értékeket.
Hibakezelés parancsállományainkban
A parancsállományokban a programozási nyelvekből ismerős TRY...CATCH...FINALLY utasítást használhatjuk a keletkezett futási idejű kivételek kezelésére. Ennek egyik módja, ha a problémás helyeken eldobunk egy kivételt a THROW utasítás használatával, majd ennek elkapásával adunk üzenetet a hibáról. Például:
function doSomeThing(x)
{
  try
  {
    if (x == 0)
      throw "x értéke nulla!";    
  }
  catch(e)
  {
    if (e == "x értéke nulla!")
      return(e + " kezelve.");
    else
      return("OK!");
  }
}
Látható, hogy x = 0 esetben egy kivételt generálunk az „x értéke nulla!” szöveggel, melyet elkapunk és feldolgozunk.
A másik eset, hogy egyszerűen a rendszer generálta hibákat - mint amilyen lehet például az, ha egy nemlétező parancssori argumentumra hivatkozunk egy sorszámmal -, elkapjuk egy TRY...CATCH utasításblokkal. Ekkor testre szabhatjuk a hibaüzeneteket. Ezt a formát választottuk a mellékelt Wsh04.wsf állományban is, a <job id=”exec”> feladatban.
try
{
  var i = args(0);
}
catch(e)
{
  WScript.Echo("Hiba!");  
}
Mellékelt program
A programban két feladatot végezhetünk el. A Program futtatása fül alatt egy tetszőleges – az alkalmazás mappájában elhelyezett, vagy a Windows rendszerkönyvtárában található állományt - érhetünk el, és futtathatunk. Ez lehet egy futtatható állomány, vagy bármilyen tetszőleges fájl, melyhez rendszerünkben program van társítva.
A MŰVELET gombra kattintva indítható a művelet. Csak arra kell ügyelnünk, hogy az állomány nevét kiterjesztéssel adjuk meg. Előbb létrehozunk a script-ben egy objektumot:
shell = WScript.CreateObject("WScript.Shell");
Majd ennek metódusával indítjuk a futtatást:
shell.Run(args(0));
Az E-mail küldése fül alatt egy elektronikus levél adatait adhatjuk meg úgy, hogy a Feladó mezőben mindenképp szabályos e-mail címet írjunk (legyen benne ’@’ karakter). A MŰVELET gombbal indítható a művelet.
A levél elküldéséhez egy új objektumot kell létrehoznunk (a kód VBScript nyelven íródott, keverendő a nyelveket):
Set iMsg = CreateObject("CDO.Message")
Majd fel kell töltenünk az objektum property-jeit adatokkal, a parancssori argumentumokkal:
With iMsg
  .From = args(0)
  .To = args(1)
  .Subject = args(2)
  .TextBody = args(3)
És el kell küldenünk azt:
  .Send
End With
A működés szempontjából fontos megemlítenünk, hogy a teszt során bizonyos szerverek nem továbbították a leveleket a címzetteknek, a többség azonban igen.

Windows Script Host lehetőségei cikksorozat