.wsf állományok
A Windows Script állományok szöveges alapú dokumentumok, melyekben XML formátumban helyezkednek el a konfigurációs bejegyzések, valamint a futtatható kódrészletek egyaránt. Ennek eredményeképpen megnövekszik a parancsállományok rugalmassága. A formátum előnyeit egy listában foglaltuk össze:
- Utasításokat tartalmazhat a script-ek futtatására vonatkozóan.
- Mivel a végrehajtás nem feldolgozó-specifikus, vagyis a parancsállomány futtatásához nem szükséges egy meghatározott futtatórendszert igénybe vennünk, így a parancsállományon belül keverhetjük a script-nyelveket.
- A parancsállomány szöveges felépítéséből adódóan könnyen szerkeszthető egy XML-szerkesztővel.
- A parancsállományban az egyes munkamenetek jól elkülönülnek egymástól, így egy állományon belül egymás után több feladat is futtatható.
- Lehetőség van arra, hogy bizonyos funkciókat elkülönült állományokban valósítsunk meg, és egy hivatkozást elhelyezve a parancsállományban érjük el azokat.
A parancsállományok meghatározott XML-elemekkel rendelkeznek, melyekkel az állomány logikai részekre bontható.
A <package> elem
A parancsállományok szerkezeti hierarchiájában a legfontosabb elem, melynek segítségével a „többfeladatos” állományokat összefoghatjuk. Ezen elemeken beül több alegységet elhelyezhetünk, a következő módon:
<package>
<job id=”myJob”>
...
</job>
<job id=”yourJob”>
...
</job>
</package>
A részegységek a <job></job> elempár közt helyezkednek el, mintegy logikai részekre tagolva a parancsállományt. A parancsállomány futtatásakor meghatározhatjuk, hogy melyik <job> bejegyzésen belül megvalósított script-et futtatjuk. A <job> elemekre azonosítójukkal hivatkozhatunk, például:
cscript myScript.wsf //job:myJob
A <?job?> elem
A parancsállományok hibakezelésére vonatkozó konfigurációs beállításokat tehetjük meg ebben az elemben. Szintaxisa:
<?job error="flag" debug="flag"?>
Mindkét attribútum logikai típusú. Az error attribútummal megadhatjuk, hogy jelenjen-e meg hibaüzenet, ha valamilyen természetellenes viselkedést produkál script-ünk. A debug attribútummal engedélyezhetjük a hibakezelést.
A <runtime> elem
Az elemben megadhatjuk a script futási idejű argumentumait. Szintaxisa:
<runtime>
<named attribútumok tulajdonságai/>
<unnamed attribútumok tulajdonságai/>
<example>Example Text</example>
...
</runtime>
A futási idejű argumentumok értékét a ShowUsage metódussal olvashatjuk ki. Az <example> elemben megadhatunk a script használatával kapcsolatos instrukciókat.
Példa alkalmazás
A mellékelt alkalmazásban egy olyan parancsállományt készítünk, mely a vele azonos mappában elhelyezett, Methods.js állományban megvalósított metódusokkal lekérdez bizonyos információkat a megadott meghajtókról.
A meghajtók betűjelét a programból gyűjtjük be egy karakterlánc-tömbbe, és ennek tartalmát adjuk át egy konstans formájában a parancsállománynak. A script a Methods.js állományban megvalósított IsFixedDrive metódussal eldönti a meghajtókról, hogy merevlemezek-e. Ha igen, akkor a kigyűjtött információkat egy XML állományba írja a script, melyet az ADATBEOLVASÁS gombbal betölthetünk a DataGrid kontrolba.
A parancsállomány futtatása a PARANCSÁLLOMÁNY FUTTATÁSA gombbal indítható.
A Methods.js állományban három metódus kódját helyeztük el, melyek a szabad és teljes lemezterületet adják vissza, valamint hogy a megadott meghajtó milyen fájlrendszerrel rendelkezik. A GetFreeSpace metódus a következő:
function GetFreeSpace(drvPath)
{
var fs, d, s;
fs = new ActiveXObject("Scripting.FileSystemObject");
d = fs.GetDrive(fs.GetDriveName(drvPath));
s = d.FreeSpace/1024 + " kB";
return s;
}
A FileSystemObject GetDrive metódusa megadja a meghajtó objektumot (Drive objektum), majd ennek FreeSpace property-jéből kiolvassuk a szabad lemezterületre vonatkozó adatot.
A Methods.js állományra a parancsállományban hivatkozunk:
<JOB>
<script language="JScript" src="Methods.js"/>
A műveletben az XML-állományt a következőképpen hoztuk létre:
<SCRIPT>
...
xmlFile = fso.CreateTextFile("drives_info.xml", -1);
A parancssori argumentumokat beolvassuk egy karakterlánc objektumba:
var args = WScript.Arguments;
var dr = new String(args(0));
A tömböt feldolgozzuk, az elemeket megvizsgáljuk, hogy milyen merevlemez-típust takarnak:
for(c=0;c<dr.length;c++)
{
var fulldr = new String(dr.substr(c,1) + ":\\");
var s = new Number(IsFixedDrive(fulldr));
if (s == 2)
{
drives[c] = fulldr;
}
}
Majd az xmlFile objektum WriteLine metódusával soronként létrehozzuk az XML-t. Látható, hogy a Wsh03.wsf parancsállomány egy <job></job> elempárt tartalmaz.
xmlFile.WriteLine("<?xml version=\"1.0\" ?>");
...
</SCRIPT>
</JOB>