C# - Windows Script Host alapismeretek

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

forráskód letöltése
Most induló cikksorozatunk célja, hogy bemutassuk a Windows 98-tól kezdve az operációs rendszer részét képező Windows Script Host szolgáltatást, mellyel lehetővé válik parancsállományok elérése és futtatása parancssorból, vagy alkalmazásainkból. A futtatható állományok valamilyen választott nyelven megírt script kódok. A sorozatok részeiben megismerhetjük a rendszer alapját képező objektum modellt, mely az adminisztrációs lehetőségek gazdag tárházát nyújtja.
Általánosságok
A Windows Script Host (WSH) egy Windows adminisztrációs eszköz, mely lehetőséget biztosít arra, hogy segítségével Visual Basic, vagy JScript parancsállományokat futtassunk közvetlenül. A merevlemezen megtalálható script állományok futtatásakor objektumokat és szolgáltatásokat tesz elérhetővé a script számára, valamint menedzseli a script futását. Tulajdonképpen futtatórendszerként viselkedik, mely meghívja a megfelelő script-motorokat.
A Windows 98 verziótól kezdődően megtalálható az operációs rendszerekben, azok szerves részeként funkcionál. A Windows 95 operációs rendszerrel rendelkező felhasználóknak telepíteni kell a szükséges modulokat az operációs rendszer alá, a WSH funkcionalitásának elérése érdekében. A cikk írásakor a WSH 5.6-os, legfrissebb verziója a következő Internetes címen volt elérhető: http://msdn.microsoft.com/scripting.
A Windows 98, Windows 2000, és Windows Me verziói a Windows Script Host 1.0, vagy 2.0-ás verzióját tartalmazzák. A WSH frissítéséhez szükséges állományok szintén a fenti Webcímen elérhetőek.
A WSH olyan nyelv-független környezet, melynek használatával lehetőségünk van script-eket futtatni parancssorból, vagy akár a Windows Desktop-ról. Az ily módon futtatható script-ekkel főként nem interaktív feladatokat végezhetünk el igen hatékonyan. Ezek közé tartoznak a login script-ek, adminisztrációs script-ek készítése.
A Windows Script Host által rendelkezésre bocsátott objektumokkal többek közt a következő műveletek végezhetők el:
  • Szöveges üzenet megjelenítése a képernyőn
  • Alapvető funkciók, melyeket a CreateObject, valamint a GetObject metódusok biztosítanak
  • Hálózati, és lokális nyomtatók elérése script-ből
  • Hálózati meghajtók elérése
  • Környezeti változók elérése és beállítása
  • A Regisztrációs adatbázis kulcsainak módosítása
  • Script-ek futtatása távoli számítógépeken.
Amikor parancsállományokról beszélünk, akkor az eddig is ismert .JS, vagy .VBS kiterjesztésű állományokra gondolunk. A Windows Script Host szolgáltatásainak, objektum-modelljének köszönhetően azonban meglehetősen új feladatok megoldására is felhasználhatjuk ezen állományokat. A parancsállományok tradicionális felhasználására legjobb példa a Webes fejlesztés, ahol a HTML-kódban megjelenő script kódokat, amennyiben azok kliens-oldali script-ek voltak, a böngészőprogram értelmezője dolgozta fel. Az ASP, ASPX oldalakon használt szerver-oldali script-betéteket viszont az IIS beépített értelmező motorja volt képes értelmezni.
Parancsállományok futtatása
A script-eket futtathatjuk egyszerűen úgy, hogy az Intézőben a fájl nevére kattintva indítjuk azt, akárcsak egy hagyományos alkalmazást.
Használhatjuk a Windows beépített futtatórendszerét is, melyet a Start menü Futtatás menüpontjában találunk.
Az operációs rendszer főmappájában találunk azonban két alkalmazást, melyekkel a script-ek futtathatók, sőt parancssori argumentumként még a futásukra vonatkozó információk is megadhatók. Ezek a WScript.exe, és a CScript.exe alkalmazások. Egy tetszőleges fájlkezelőben a script állományra kattintva a WScript.exe alkalmazás futtatja a script-et alapértelmezésben, ez azonban meg megváltoztatható az alábbi utasítással:
cscript //h:cscript
A változtatás visszavonásához tegyük a következőt:
wscript //h:cscript
Az alkalmazások neve után kell megadni a futtatandó állomány nevét a futás érdekében. A script-ek futtatására vonatkozó beállításokat egy közös dialógusablakban tehetjük meg, melyet megjeleníthetünk, ha a parancssorba beírjuk a wscript.exe állomány nevét, és ENTER-t ütünk.
Arra vonatkozóan tehetünk beállításokat, hogy mennyi az a maximális idő, amíg a script futhat, valamint, hogy jelenjen-e meg embléma a script parancskonzolos futtatásakor. A beállításokat természetesen a script futtatásakor is megadhatjuk a futtató alkalmazásoknak parancssori argumentumként. Az időre vonatkozó beállítás másodpercben a „//T:nn” argumentummal adható meg. Az alapértelmezett érték az, hogy nincs korlátozva a futás ideje. Az embléma engedélyezésére a „//logo”, illetve a „//nologo” argumentumok alkalmasak.

Gyakorlati példa
A sorozat cikkeiben sorban bemutatjuk a WSH lehetőségeit, példákkal alátámasztva. Mai cikkünkben egy egyszerű feladat elvégzését bíztuk az alkalmazás mappájában megtalálható calculator.js parancsállományra: egy kiválasztott két-operandusú műveletet végez el a megadott két számon. A számok helyességét programból ellenőrizzük, csupán a művelet elvégzése a script feladata, mely parancssori argumentumként kapja meg az operandusokat, valamint a műveletre vonatkozó információt.
A programban a műveletet indító gombra kattintva a Process osztály statikus Start metódusával futtatjuk a parancsállományt. A Start metódusnak egy ProcessStartInfo osztályú objektumot adunk át paraméterként, mely property-jeiben tartalmazza a futtatandó parancsállomány nevét és az argumentumokat. A műveletek nevét egy ComboBox kontrol tartalmazza, ezek indexe adódik át a parancssori argumentumban a script-nek:
...
ProcessStartInfo psi = new ProcessStartInfo();
psi.Arguments = op1Text.Text + " " + op2Text.Text + " " + mCombo.SelectedIndex.ToString();
psi.FileName = Application.StartupPath + "\\calculator.js";
Process.Start(psi);
A script törzsében a WSH objektummodelljének gyökérobjektuma segítségével lekérdezzük a parancssori argumentumokat:
objArgs = WScript.Arguments;
Az argumentumok értéke az objArgs gyűjtemény indexelésével lekérdezhetők, belőlük számobjektumokat készítünk a JScript beépített Number objektuma segítségével:
op1 = new Number(objArgs(0));
op2 = new Number(objArgs(1));
A művelet elvégzése után az előálló eredményt a result változóban gyűjtjük, és egy információs szöveg kíséretében megjelenítjük egy dialógusablakban. Ehhez a WScript objektum Echo metódusát használjuk:

WScript.Echo("A megadott operandusokkal végzett művelet: " + str + "\nEredménye: " + result);

Windows Script Host lehetőségei cikksorozat