C# - WSH objektummodell

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

forráskód letöltése
A cikksorozat első részében megismerkedhettünk a Windows Script Host (WSH) operációs rendszerbeli szolgáltatás alapjaival. Az alapismereteket kiegészítendő megismerkedhetünk a WSH objektummodelljével, melynek ismerete elengedhetetlen a munka során. A modell tagjai közül kiszemelünk néhányat, melyet felhasználunk a mellékelt példa futtatandó parancsállományaiban. Az objektumok property-jeinek segítségével bemutatjuk, hogyan érhetjük el az operációs rendszer Asztalán fellelhető parancsikonokat.
Objektummodell
A Windows Script Host objektummodellje 14 darab konzisztens objektumot tartalmaz, a gyökérobjektum neve Wscript. Ezzel már az ezt megelőző cikk script-jében is találkozhattunk érintőlegesen.
Az objektummodell révén egy logikusan felépített, szisztematikusan egymásra épülő objektumrendszert kapunk használatra készen, melynek segítségével egyszerűen végezhetünk el adminisztratív teendőket. A COM interfészeken keresztül elvégezhető feladatoknak alapvetően két kategóriája létezik:
  • Script-ek futtatása és hibajavítás
A COM interfészek révén a script-nek lehetősége van arra, hogy manipulálják a WSH-motort, üzeneteket jelenítsenek meg a képernyőn egy ablakban, valamint hogy műveleteket végezzenek el objektumokon (létrehozás, hivatkozások lekérdezése).
  • Segédfunkciók
A metódusok és property-k teszik lehetővé, hogy a script olyan műveleteket végezzen el, mint a hálózati meghajtók észlelése, hálózati nyomtatók elérése, környezeti változók lekérdezése és módosítása, valamint a Regisztrációs adatbázis bejegyzéseinek módosítása.
Rendszergazdák szintén használhatják ezen objektumokat arra, hogy adminisztratív célú script-eket írjanak munkájuk könnyítésére, például LOGIN script-ekkel.
Néhány gondolat erejéig ejtsünk szót az egyes objektumokról.

Wscript objektum
  • Ahogy említettük, a Wscript objektum segítségével érhetjük el az objektummodell gyökérobjektumát. A Wscript objektum metódusainak és property-jeinek meghívása, illetve lekérdezése előtt nincs szükség arra, hogy az objektumot példányosítsuk, elérhető minden script-ből. Tulajdonságai:
  • Beállíthatjuk és lekérdezhetjük a parancssori argumentumokat
  • Meghatározhatjuk a script állomány nevét, valamint a HOST fájl nevét (wscript.exe vagy cscript.exe)
  • Meghatározhatjuk a HOST verziószámát (Version property)
  • Kapcsolódhatunk COM objektumokhoz (ConnectObject metódus)
  • Szinkronizálja a script-eseményeket
  • Leállíthatja az éppen futó script-et programból
  • A standard kimenetre küldhet üzeneteket (üzenetpanel, vagy parancssor) az éppen futó folyamat állapotáról.
WshArguments, WshUnnamed és WshNamed objektumok
Biztosítanak egy-egy gyűjteményt a megadott parancssori argumentumok számára. A WshArgument objektum az argumentumokat abban a sorrendben tárolja, amilyen sorrendben a parancssorban megadásra kerültek. A mellékelt script-ben a következőképpen kérdezzük le ezeket:
var objArgs = Wscript.Arguments;
A WshNamed objektum teszi lehetővé, hogy a parancssori argumentumokat névvel ellátva tároljuk, és ezekre így hivatkozzunk. A WshUnnsmed objektum szintén név nélkül tárolja az argumentumokat.
WshNetwork objektum
Lehetővé teszi, hogy a hálózati erőforrásokat a script-et futtató számítógépről elérjük. Elérhetjük a megosztott mappákat, a megosztott nyomtatókat, információkat szerezhetünk a hálózat felhasználóiról.
Használata:
var WshNetwork = WScript.CreateObject("WScript.Network");
WshController objektum
Egyetlen, CreateScript nevű metódusával lehetővé teszi, hogy parancsállományokat érjünk el és futtassunk lokálisan, vagy akár egy távoli számítógépen.
Használata:
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();
WshRemote objektum
Az objektum szorosan kapcsolódik a WshController objektumhoz. Lehetőséget biztosít arra, hogy távoli script-műveleteket végezzünk el. Egy távoli számítógép adminisztrálása válik ily módon lehetővé. Nincs szükség csak egy .js, .vbs, .wsh, .wsf kiterjesztésű script állományra ahhoz, hogy egy process-t elindítsunk. Minden futó script egy process. Amennyiben nem adunk meg hálózati elérésre vonatkozó adatokat, a script lokálisan fog futni.
Amikor a CreateScript metódussal létrehozzuk a parancsállományt (a célszámítógép nevének megadásával), akkor az lemásolódik a távoli számítógépre. Csak az Execute metódus meghívása után kezd el futni.
A távoli gépen már megfelelő jogosultságok birtokában bármihez hozzáférhet. Amennyiben valamilyen hiba következik be a távoli script-műveletben, akkor egy WshRemoteError objektum property-jeiben kérdezhetjük le annak adatait.
WshShell objektum
A script futásakor egy WshShell objektumot kell létrehozni mindig, ha lokálisan kívánjuk a script-et futtatni, el akarjuk érni a Registry-t, vagy parancsikont akarunk létrehozni. Természetesen ezt kell tennünk akkor is, ha a környezeti változókat akarjuk állítani, vagy a fájlrendszer elemeit elérni. A mellékelt példában ennek használatára mutatunk példát.
WshShortcut objektum
Segítségével érhetjük el, hogy parancsikonokat hozzunk létre, töröljünk, vagy tegyünk át máshová az adott rendszeren belül, az Asztalon.
WshSpecialfolders objektum
A WshShell objektum SpecialFolders property-jén keresztül érhetjük el. Ez a gyűjtemény tartalmazza a Windows rendszerben beépített módon létrehozott, nevesített mappákat. Ilyen lehet a Desktop, vagy a Start Menu mappák.
Az objektum tartalmazza a nevesített mappák elérési útvonalát, mely természetesen függ attól, hogy milyen felhasználói környezetben dolgozunk.
WshEnvironment objektum
A WshShell objektum Environment property-je adja vissza az objektumot, melynek segítségével a környezeti változók tartalma beállítható és lekérdezhető.
Használata:
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));
Mellékelt példa
A mellékelt példában az Asztalon való parancsikon létrehozására mutatunk példát. A From PROGRAM füle alatt elhelyezett beviteli mezőkben megadhatók a parancssori argumentumok, melyeket az alkalmazás mappájában elhelyezett Shortcut01 parancsállománnyal dolgoztatunk fel.
A programra mutató parancsikon létrehozásakor meg kell ugyanis adnunk egy nevet, mely megjelenik a parancsikonnál, valamint egy program, vagy állomány elérési útvonalát, melyre a parancsikon mutathat. A MŰVELET gombra kattintva a Process osztály Start metódusával futtatjuk le a script-et.
A script-ben először lekérdezzük a parancssori argumentumokat:
var objArgs = WScript.Arguments;
name = objArgs(0);
target = objArgs(1);
Létrehozzuk a WshShell objektumot:
var WshShell = WScript.CreateObject("WScript.Shell");
Létrehozzuk a WshSpecialfolders, illetve WshShortcut objektumokat:
strDesktop = WshShell.SpecialFolders("Desktop");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\"+name+".lnk");
Megadjuk az elérési útvonalat:
oShellLink.TargetPath = target;
Még néhány opcionális adatot:
oShellLink.WindowStyle = 1;
oShellLink.Hotkey = "CTRL+SHIFT+F";
oShellLink.IconLocation = "notepad.exe, 0";
oShellLink.WorkingDirectory = strDesktop;
Majd mentjük a parancsikont:
oShellLink.Save();
Az URL fül alatt egy létező URL-t kell csak megadnunk ahhoz, hogy a parancsikonunk egy link legyen a megadott Internetes erőforrásra. A Shortcut02 script-ben csak annyi változást eszközöltünk, hogy egy WshUrlShortcut objektumot kell létrehoznunk, amit a következőképpen jelzünk a feldolgozónak:
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\"+target+".url");

Windows Script Host lehetőségei cikksorozat