|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Ãëàâà 1 Ïåðâîå çíàêîìñòâî ñ Windows Script Host  ðàííèõ âåðñèÿõ Windows ñòàíäàðòíûì ñðåäñòâîì äëÿ àâòîìàòèçàöèè îäíîòèïíûõ ïîâòîðÿþùèõñÿ çàäà÷ ñëóæèëè êîìàíäíûå (ïàêåòíûå) ôàéëû è óòèëèòû ïàêåòà Resource Kit äëÿ ñîîòâåòñòâóþùåé âåðñèè. Îäíàêî äàæå ñ ïîìîùüþ èìåþùåãîñÿ â Windows NT/2000/XP óñîâåðøåíñòâîâàííîãî êîìàíäíîãî èíòåðïðåòàòîðà cmd.exe òðóäíî íàïèñàòü êàêóþ-ëèáî ñëîæíóþ ïðîãðàììó-ñöåíàðèé (script): îòñóòñòâóåò ïîëíîöåííàÿ èíòåðàêòèâíîñòü, íåëüçÿ íàïðÿìóþ ðàáîòàòü ñ ðàáî÷èì ñòîëîì Windows è ñèñòåìíûì ðååñòðîì è ò.ä. Äëÿ èñïðàâëåíèÿ ýòîé ñèòóàöèè êîìïàíèåé Microsoft áûë ðàçðàáîòàí ñåðâåð ñöåíàðèåâ WSH — Windows Script Host, ñ ïîìîùüþ êîòîðîãî ìîæíî âûïîëíÿòü ñöåíàðèè, íàïèñàííûå, â ïðèíöèïå, íà ëþáîì ÿçûêå (ïðè óñëîâèè, ÷òî äëÿ ýòîãî ÿçûêà óñòàíîâëåí ñîîòâåòñòâóþùèé ìîäóëü (scripting engine), ïîääåðæèâàþùèé òåõíîëîãèþ ActiveX Scripting).  êà÷åñòâå ñòàíäàðòíûõ ÿçûêîâ ïîääåðæèâàþòñÿ Visual Basic Script Edition (VBScript) è JScript. Âîîáùå ãîâîðÿ, ïðèíöèï ðàáîòû ñöåíàðèåâ, ïîääåðæèâàåìûõ WSH, ñîñòîèò â èñïîëüçîâàíèè îáúåêòîâ ActiveX, ïîýòîìó âíà÷àëå ìû î÷åíü êðàòêî îïèøåì âîçìîæíîñòè ñàìîé òåõíîëîãèè ActiveX êîìïàíèè Microsoft. Âîçìîæíîñòè òåõíîëîãèè ActiveX Íàïîìíèì, ÷òî â Windows ñ ñàìîãî íà÷àëà äëÿ îáåñïå÷åíèÿ îáìåíà äàííûìè ìåæäó ïðèëîæåíèÿìè áûëà ðàçðàáîòàíà òåõíîëîãèÿ ñâÿçûâàíèÿ è âíåäðåíèÿ îáúåêòîâ (OLE, Object Linking and Embedding). Âíà÷àëå òåõíîëîãèÿ OLE èñïîëüçîâàëàñü äëÿ ñîçäàíèÿ ñîñòàâíûõ äîêóìåíòîâ, à çàòåì äëÿ ðåøåíèÿ áîëåå îáùåé çàäà÷è — ïðåäîñòàâëåíèÿ ïðèëîæåíèÿìè äðóã äðóãó ñîáñòâåííûõ ôóíêöèé (ñëóæá) è ïðàâèëüíîãî èñïîëüçîâàíèÿ ýòèõ ôóíêöèé. Òåõíîëîãèÿ, ïîçâîëÿþùàÿ îäíîìó ïðèëîæåíèþ (êëèåíòó àâòîìàòèçàöèè), âûçûâàòü ôóíêöèè äðóãîãî ïðèëîæåíèÿ (ñåðâåðà àâòîìàòèçàöèè), áûëà íàçâàíà OLE Automation.  îñíîâå OLE è OLE Automation ëåæèò ðàçðàáîòàííàÿ Microsoft áàçîâàÿ "êîìïîíåíòíàÿ" òåõíîëîãèÿ COM (Component Object Model).  îáùèõ ñëîâàõ, êîìïîíåíòíîå ïðîãðàììíîå îáåñïå÷åíèå — ýòî ñïîñîá ðàçðàáîòêè ïðîãðàìì, ïðè êîòîðîì èñïîëüçóþòñÿ òåõíîëîãèè ñîçäàíèÿ ïðîãðàììíûõ ìîäóëåé, ïîäîáíûå òåõíîëîãèÿì, ïðèìåíÿåìûì äëÿ ðàçðàáîòêè àïïàðàòíûõ ñðåäñòâ. Ñëîæíûå ýëåìåíòíûå ñõåìû ñîáèðàþòñÿ èç ñòàíäàðòèçèðîâàííûõ ìèêðîñõåì, êîòîðûå èìåþò ÷åòêî îïðåäåëåííûå äîêóìåíòèðîâàííûå ôóíêöèè. Ðàçðàáîò÷èê ìîæåò ýôôåêòèâíî ïîëüçîâàòüñÿ òàêèìè ìèêðîñõåìàìè, íå çàäóìûâàÿñü îá èõ âíóòðåííåé ñòðóêòóðå.  ïðîãðàììíûõ êîìïîíåíòàõ, íàïèñàííûõ íà êàêîì-ëèáî ÿçûêå ïðîãðàììèðîâàíèÿ, äåòàëè ðåàëèçàöèè èñïîëüçóåìûõ àëãîðèòìîâ òàêæå ñêðûòû âíóòðè êîìïîíåíòà (îáúåêòà), à íà ïîâåðõíîñòè íàõîäÿòñÿ îáùåäîñòóïíûå èíòåðôåéñû, êîòîðûìè ìîãóò ïîëüçîâàòüñÿ è äðóãèå ïðèëîæåíèÿ, íàïèñàííûå íà òîì æå èëè äðóãîì ÿçûêå.  íàñòîÿùåå âðåìÿ, ïî çàÿâëåíèþ Microsoft, òåðìèí OLE èñïîëüçóåòñÿ òîëüêî ïî èñòîðè÷åñêèì ïðè÷èíàì. Âìåñòî íåãî Microsoft ñ 1996 ãîäà ïðèìåíÿåò íîâûé òåðìèí — ActiveX, ïåðâîíà÷àëüíî îáîçíà÷àâøèé WWW (World Wide Web) êîìïîíåíòû (îáúåêòû), ñîçäàííûå íà áàçå òåõíîëîãèè ÑÎÌ. Òåõíîëîãèÿ ActiveX äî ïîñëåäíåãî âðåìåíè ÿâëÿëàñü êëþ÷åâîé â ïðîäóêòàõ Microsoft. Íàèáîëåå ïîëíîå âîïëîùåíèå îíà íàøëà â ïðîãðàììàõ Microsoft Office, Internet Explorer, IIS (Internet Information Service).  ýòè ïðîäóêòû äëÿ óïðàâëåíèÿ ñîîòâåòñòâóþùèìè îáúåêòàìè àâòîìàòèçàöèè áûëè âñòðîåíû èíòåðïðåòàòîðû ñïåöèàëüíûõ ÿçûêîâ ñöåíàðèåâ: VBScript (èñïîëüçóåòñÿ â Microsoft Office, Internet Explorer, IIS) è JScript (èñïîëüçóåòñÿ â Internet Explorer, IIS). Îäíàêî íåïîñðåäñòâåííî â îïåðàöèîííîé ñèñòåìå, âíå ýòèõ ïðîäóêòîâ, âûïîëíÿòü ñöåíàðèè, íàïèñàííûå íà VBScript èëè JScript, áûëî íåëüçÿ. Ñåðâåð ñöåíàðèåâ WSH ÿâëÿåòñÿ ìîùíûì èíñòðóìåíòîì, ïðåäîñòàâëÿþùèì åäèíûé èíòåðôåéñ (îáúåêòíóþ ìîäåëü) äëÿ ñïåöèàëèçèðîâàííûõ ÿçûêîâ (VBScript, JScript, PerlScript, REXX, TCL, Python è ò.ï.), êîòîðûå, â ñâîþ î÷åðåäü, ïîçâîëÿþò èñïîëüçîâàòü ëþáûå âíåøíèå îáúåêòû ActiveX. Ñ ïîìîùüþ WSH ñöåíàðèè ìîãóò áûòü âûïîëíåíû íåïîñðåäñòâåííî â îïåðàöèîííîé ñèñòåìå Windows, áåç âñòðàèâàíèÿ â HTML-ñòðàíèöû. Íóìåðàöèÿ âåðñèé WSH Ñêàæåì íåñêîëüêî ñëîâ îòíîñèòåëüíî íóìåðàöèè âåðñèé WSH. Ñàìàÿ ïåðâàÿ âåðñèÿ WSH, âõîäèâøàÿ â êà÷åñòâå ñòàíäàðòíîãî êîìïîíåíòà â Windows 98, èìåëà íîìåð 1.0. Ñ äðóãîé ñòîðîíû, ýòà âåðñèÿ îïèðàëàñü íà ÿçûêè ñöåíàðèåâ JScript è VBScript âåðñèè 5.0, êîòîðûå ïîääåðæèâàëèñü Internet Explorer 5.0, ïîýòîìó ìîæíî ê ñàìîé ïåðâîé âåðñèè WSH îòíîñèòüñÿ è êàê ê WSH 5.0. Ñëåäóþùåé âåðñèè WSH, âõîäèâøåé â ïîñòàâêó Windows 2000, áûë ïðèñâîåí íîìåð 2.0; â ýòîé âåðñèè èñïîëüçîâàëèñü ÿçûêè JScript è VBScript âåðñèè 5.1. Íàêîíåö, íîìåð ïîñëåäíåé âåðñèè WSH, ÿâëÿþùåéñÿ íåîòúåìëåìîé ÷àñòüþ Windows ÕÐ, êîìïàíèÿ Microsoft ðåøèëà âñå æå ïðèâÿçàòü ê íîìåðó âåðñèè ÿçûêîâ JScript è VBScript — òàêèì îáðàçîì ïîÿâèëñÿ ñåðâåð ñöåíàðèåâ WSH 5.6. Îòìåòèì òàêæå, ÷òî äàæå ñàìà àááðåâèàòóðà "WSH" ñíà÷àëà ðàñøèôðîâûâàëàñü Microsoft êàê "Windows Scripting Host", à çàòåì áûëî ïðèíÿòî íàçâàíèå "Windows Script Host". Çàìå÷àíèå Íàçíà÷åíèå è îñíîâíûå ñâîéñòâà WSH WSH ïðåäúÿâëÿåò ìèíèìàëüíûå òðåáîâàíèÿ ê îáúåìó îïåðàòèâíîé ïàìÿòè è ÿâëÿåòñÿ î÷åíü óäîáíûì èíñòðóìåíòîì äëÿ àâòîìàòèçàöèè ïîâñåäíåâíûõ çàäà÷ ïîëüçîâàòåëåé è àäìèíèñòðàòîðîâ îïåðàöèîííîé ñèñòåìû Windows. Èñïîëüçóÿ ñöåíàðèè WSH, ìîæíî íåïîñðåäñòâåííî ðàáîòàòü ñ ôàéëîâîé ñèñòåìîé êîìïüþòåðà, à òàêæå óïðàâëÿòü ðàáîòîé äðóãèõ ïðèëîæåíèé (ñåðâåðîâ àâòîìàòèçàöèè). Ïðè ýòîì âîçìîæíîñòè ñöåíàðèåâ îãðàíè÷åíû òîëüêî ñðåäñòâàìè, êîòîðûå ïðåäîñòàâëÿþò äîñòóïíûå ñåðâåðû àâòîìàòèçàöèè. Ïåðå÷èñëèì òîëüêî íàèáîëåå î÷åâèäíûå çàäà÷è, äëÿ àâòîìàòèçàöèè êîòîðûõ ïðåêðàñíî ïîäõîäÿò ñöåíàðèè WSH. ? Îðãàíèçàöèÿ ðåçåðâíîãî êîïèðîâàíèÿ íà ñåòåâîé ñåðâåð ôàéëîâ ñ ëîêàëüíîé ìàøèíû, êîòîðûå îòáèðàþòñÿ ïî êàêîìó-ëèáî êðèòåðèþ. ? Áûñòðîå èçìåíåíèå êîíôèãóðàöèè ðàáî÷åãî ñòîëà Windows â çàâèñèìîñòè îò çàäà÷, âûïîëíÿåìûõ ïîëüçîâàòåëåì. ? Àâòîìàòè÷åñêèé çàïóñê ïðîãðàìì Microsoft Office, ñîçäàíèå òàì ñëîæíûõ ñîñòàâíûõ äîêóìåíòîâ, ðàñïå÷àòêà ýòèõ äîêóìåíòîâ è çàêðûòèå ïðèëîæåíèé. ? Óïðàâëåíèå ðàáîòîé ïðèëîæåíèé, íå ÿâëÿþùèõñÿ ñåðâåðàìè àâòîìàòèçàöèè, ñ ïîìîùüþ ïîñûëêè â ýòè ïðèëîæåíèÿ íàæàòèé êëàâèø. ? Ïîäêëþ÷åíèå è îòêëþ÷åíèå ñåòåâûõ ðåñóðñîâ (äèñêîâ è ïðèíòåðîâ). ? Ñîçäàíèå ñëîæíûõ ñöåíàðèåâ ðåãèñòðàöèè äëÿ ïîëüçîâàòåëåé. ? Âûïîëíåíèå çàäà÷ àäìèíèñòðèðîâàíèÿ ëîêàëüíîé ñåòè (íàïðèìåð, äîáàâëåíèå èëè óäàëåíèå ïîëüçîâàòåëåé). Ñîçäàíèå è çàïóñê ïðîñòåéøèõ ñöåíàðèåâ JScript è VBScript Ïðîñòåéøèé WSH-ñöåíàðèé, íàïèñàííûé íà ÿçûêå JScript èëè VBScript, — ýòî îáû÷íûé òåêñòîâûé ôàéë ñ ðàñøèðåíèåì js èëè vbs ñîîòâåòñòâåííî, ñîçäàòü åãî ìîæíî â ëþáîì òåêñòîâîì ðåäàêòîðå, ñïîñîáíîì ñîõðàíÿòü äîêóìåíòû â ôîðìàòå "Òîëüêî òåêñò". Çàìå÷àíèå Ðàçìåð ñöåíàðèÿ ìîæåò èçìåíÿòüñÿ îò îäíîé äî òûñÿ÷ ñòðîê, ïðåäåëüíûé ðàçìåð îãðàíè÷èâàåòñÿ ëèøü ìàêñèìàëüíûì ðàçìåðîì ôàéëà â ñîîòâåòñòâóþùåé ôàéëîâîé ñèñòåìå.  êà÷åñòâå ïåðâîãî ïðèìåðà ñîçäàäèì JScript-ñöåíàðèé, âûâîäÿùèé íà ýêðàí äèàëîãîâîå îêíî ñ íàäïèñüþ "Ïðèâåò!" (ðèñ. 1.1). Ðèñ. 1.1. Ïðîñòîå äèàëîãîâîå îêíî Äëÿ âûâîäà òàêîãî îêíà äîñòàòî÷íî ñ ïîìîùüþ, íàïðèìåð, ñòàíäàðòíîãî Áëîêíîòà Windows (notepad.exe) ñîçäàòü ôàéë First.js, ñîäåðæàùèé âñåãî îäíó ñòðîêó: WScript.Echo("Ïðèâåò!"); Òîò æå ñàìûé ñöåíàðèé íà ÿçûêå VBScript, åñòåñòâåííî, îòëè÷àåòñÿ ñèíòàêñèñîì è âûãëÿäèò ñëåäóþùèì îáðàçîì: WScript.Echo "Ïðèâåò!" Íåñìîòðÿ íà òî, ÷òî äëÿ ðàáîòû íàøèõ ñöåíàðèåâ äîñòàòî÷íî âñåãî îäíîé ñòðîêè, æåëàòåëüíî ñðàçó ïðèó÷èòü ñåáÿ ê äîáàâëåíèþ â íà÷àëî ôàéëà èíôîðìàöèè î íàõîäÿùåìñÿ â íåì ñöåíàðèè: èìÿ ôàéëà, èñïîëüçóåìûé ÿçûê, êðàòêîå îïèñàíèå âûïîëíÿåìûõ äåéñòâèé. Íà ÿçûêå JScript òàêàÿ èíôîðìàöèÿ, îôîðìëåííàÿ â âèöå êîììåíòàðèåâ, ìîæåò âûãëÿäåòü ñëåäóþùèì îáðàçîì: /*******************************************************************/ /* Èìÿ: First.js */ /* ßçûê: JScript */ /* Îïèñàíèå: ÂÛÂÎÄ íà ýêðàí ïðèâåòñòâèÿ */ /*******************************************************************/ Ðèñ. 1.2. Ñöåíàðèé First.js Íà ÿçûêå VBScript òî æå ñàìîå âûãëÿäèò ñëåäóþùèì îáðàçîì: '******************************************************************* ' Èìÿ: First.vbs ' ßçûê: VBScript ' Îïèñàíèå: Âûâîä íà ýêðàí ïðèâåòñòâèÿ '******************************************************************* Äëÿ çàïóñêà ñöåíàðèåâ WSH ñóùåñòâóåò íåñêîëüêî ñïîñîáîâ. Çàïóñê ñöåíàðèÿ èç êîìàíäíîé ñòðîêè â êîíñîëüíîì ðåæèìå Ìîæíî âûïîëíèòü ñöåíàðèé èç êîìàíäíîé ñòðîêè ñ ïîìîùüþ êîíñîëüíîé âåðñèè WSH cscript.exe. Íàïðèìåð, ÷òîáû çàïóñòèòü ñöåíàðèé, çàïèñàííûé â ôàéëå C:\Script\First.js, íóæíî çàãðóçèòü êîìàíäíîå îêíî è âûïîëíèòü â íåì êîìàíäó cscript Ñ:\Script\First.js  ðåçóëüòàòå âûïîëíåíèÿ ýòîãî ñöåíàðèÿ â êîìàíäíîå îêíî âûâåäåòñÿ ñòðîêà "Ïðèâåò!" (ðèñ. 1.3). Ðèñ. 1.3. Ðåçóëüòàò âûïîëíåíèÿ First.js â êîíñîëüíîì ðåæèìå (cscript.exe) Çàïóñê ñöåíàðèÿ èç êîìàíäíîé ñòðîêè â ãðàôè÷åñêîì ðåæèìå Ñöåíàðèé ìîæíî âûïîëíèòü èç êîìàíäíîé ñòðîêè ñ ïîìîùüþ (îêîííîé) ãðàôè÷åñêîé âåðñèè WSH wscript.exe. Äëÿ íàøåãî ïðèìåðà â ýòîì ñëó÷àå íóæíî âûïîëíèòü êîìàíäó wscript C:\Script\First.js Òîãäà â ðåçóëüòàòå âûïîëíåíèÿ ñöåíàðèÿ íà ýêðàíå ïîÿâèòñÿ íóæíîå íàì äèàëîãîâîå îêíî (ðèñ. 1.4). Òàêèì îáðàçîì, ìû âèäèì, ÷òî ïðè çàïóñêå ñöåíàðèÿ â êîíñîëüíîì ðåæèìå âûâîä òåêñòîâîé èíôîðìàöèè ïðîèñõîäèò â ñòàíäàðòíûé âûõîäíîé ïîòîê (íà ýêðàí), ïðè çàïóñêå â ãðàôè÷åñêîì ðåæèìå — â äèàëîãîâîå îêíî. Ðèñ. 1.4. Ðåçóëüòàò âûïîëíåíèÿ First.js â ãðàôè÷åñêîì ðåæèìå (wscript.exe) Çàïóñê ñöåíàðèÿ ñ ïîìîùüþ ìåíþ Ïóñê Äëÿ çàïóñêà ñöåíàðèÿ ñ ïîìîùüþ ïóíêòà Âûïîëíèòü (Run) ìåíþ Ïóñê (Start), äîñòàòî÷íî íàïèñàòü ïîëíîå èìÿ ýòîãî ñöåíàðèÿ â ïîëå Îòêðûòü (Open) (ðèñ. 1.5). Ðèñ. 1.5. Çàïóñê ñöåíàðèÿ èç ìåíþ Ïóñê â Windows ÕÐ Â ýòîì ñëó÷àå ïî óìîë÷àíèþ ñöåíàðèé áóäåò âûïîëíåí ñ ïîìîùüþ wscript.exe, ò.å. âûâîä èíôîðìàöèè áóäåò âåñòèñü â ãðàôè÷åñêîå äèàëîãîâîå îêíî. Çàïóñê ñöåíàðèÿ ñ ïîìîùüþ Ïðîâîäíèêà Windows (Windows Explorer) Ñàìûì ïðîñòûì ÿâëÿåòñÿ çàïóñê ñöåíàðèÿ â îêíàõ Ïðîâîäíèêà Windows èëè íà ðàáî÷åì ñòîëå — äîñòàòî÷íî ïðîñòî âûïîëíèòü äâîéíîé ùåë÷îê ìûøüþ íà èìåíè ôàéëà ñî ñöåíàðèåì èëè íà åãî çíà÷êå (ðèñ. 1.6). Ðèñ. 1.6. Çàïóñê ñöåíàðèÿ ñ ïîìîùüþ Ïðîâîäíèêà Windows Ïðè ýòîì, êàê è â ñëó÷àå çàïóñêà ñ ïîìîùüþ ìåíþ Ïóñê (Start), ñöåíàðèé ïî óìîë÷àíèþ âûïîëíÿåòñÿ ñ ïîìîùüþ wscript.exe. Óñòàíîâêà è èçìåíåíèå ñâîéñòâ ñöåíàðèåâ  ñëó÷àå íåîáõîäèìîñòè äëÿ ñöåíàðèåâ ìîæíî çàäàâàòü ðàçëè÷íûå ïàðàìåòðû, âëèÿþùèå íà õîä èõ âûïîëíåíèÿ. Äëÿ êîíñîëüíîé (cscript.exe) è ãðàôè÷åñêîé (wscript.exe) âåðñèé ñåðâåðà ñöåíàðèåâ ýòè ïàðàìåòðû çàäàþòñÿ ïî-ðàçíîìó. Ñâîéñòâà è ïàðàìåòðû ñöåíàðèåâ, âûïîëíÿåìûõ ñ ïîìîùüþ cscript.exe  ýòîì ñëó÷àå èñïîëíåíèå ñöåíàðèÿ êîíòðîëèðóåòñÿ ñ ïîìîùüþ ïàðàìåòðîâ êîìàíäíîé ñòðîêè äëÿ cscript.exe (òàáë. 1.1), êîòîðûå âêëþ÷àþò èëè îòêëþ÷àþò ðàçëè÷íûå îïöèè WSH (âñå ýòè ïàðàìåòðû íà÷èíàþòñÿ ñ ñèìâîëîâ //). Òàáëèöà 1.1. Ïàðàìåòðû êîìàíäíîé ñòðîêè cscript.exe
Íàïðèìåð, êîìàíäà cscript //Nologo C:\Script\First.js çàïóñòèò ñöåíàðèé First.js áåç èíôîðìàöèè î âåðñèè WSH (ðèñ. 1.7). Ñöåíàðèé ìîæíî çàïóñêàòü ñ ïàðàìåòðàìè êîìàíäíîé ñòðîêè, êîòîðûå óêàçûâàþòñÿ ïîñëå èìåíè ýòîãî ñöåíàðèÿ (ïðîöåäóðà îáðàáîòêè òàêèõ ïàðàìåòðîâ áóäåò îïèñàíà íèæå, ïðè ðàññìîòðåíèè îáúåêòîâ WshArguments, WshNamedè WshUnnamed). Íàïðèìåð, êîìàíäà cscript // C:\Script\First.js /à /b çàïóñòèò ñöåíàðèé First.js â ïàêåòíîì ðåæèìå, ïðè ýòîì /àè /báóäóò ÿâëÿòüñÿ ïàðàìåòðàìè ýòîãî ñöåíàðèÿ, à //B— ïàðàìåòðîì ïðèëîæåíèÿ cscript.exe. Ðèñ. 1.7. Ðåçóëüòàò âûïîëíåíèÿ First.js â êîíñîëüíîì ðåæèìå áåç èíôîðìàöèè î âåðñèè WSH Ñâîéñòâà è ïàðàìåòðû ñöåíàðèåâ, âûïîëíÿåìûõ ñ ïîìîùüþ wscript.exe Ïðè èñïîëüçîâàíèè äëÿ çàïóñêà ìîäóëÿ wscript.exe ñâîéñòâà ñöåíàðèÿ ìîæíî óñòàíàâëèâàòü ñ ïîìîùüþ âêëàäêè Ñöåíàðèé (Script) äèàëîãîâîãî îêíà, çàäàþùåãî ñâîéñòâà ôàéëà â Windows (ðèñ. 1.8). Ïîñëå çàäàíèÿ ñâîéñòâ ñöåíàðèÿ àâòîìàòè÷åñêè ñîçäàåòñÿ ôàéë ñ èìåíåì ýòîãî ñöåíàðèÿ è ðàñøèðåíèåì wsh, êîòîðûé èìååò ñòðóêòóðó íàïîäîáèå ini-ôàéëà, íàïðèìåð: [ScriptFile] Path=C:\Script\First.js [Options] Timeout=0 DisplayLogo=1 Åñëè äâàæäû ùåëêíóòü â Ïðîâîäíèêå Windows ïî wsh-ôàéëó èëè çàïóñòèòü òàêîé ôàéë èç êîìàíäíîé ñòðîêè, òî ñîîòâåòñòâóþùèé ñåðâåð ñöåíàðèåâ (wscript.exe èëè cscript.exe) çàïóñòèò ñöåíàðèé, êîòîðîìó ñîîòâåòñòâóåò wsh- ôàéë, ñ çàäàííûìè â ñåêöèè Options ïàðàìåòðàìè. Çàìå÷àíèå Ðèñ. 1.8. Óñòàíîâêà ñâîéñòâ ñöåíàðèÿ First.js Ïðè çàïóñêå ñöåíàðèåâ ñ ïîìîùüþ wscript.exe äëÿ çàäàíèÿ ïàðàìåòðîâ êîìàíäíîé ñòðîêè ñöåíàðèÿ ìîæíî èñïîëüçîâàòü òåõíîëîãèþ drag-and-drop — åñëè âûäåëèòü â Ïðîâîäíèêå Windows íåñêîëüêî ôàéëîâ è ïåðåòàùèòü èõ íà ÿðëûê ñöåíàðèÿ, òî ýòîò ñöåíàðèé çàïóñòèòñÿ, à èìåíà âûäåëåííûõ ôàéëîâ ïåðåäàäóòñÿ åìó â êà÷åñòâå ïàðàìåòðîâ. Ñòàíäàðòíûå îáúåêòû WSH5.6 Ïåðåéäåì òåïåðü ê îïèñàíèþ ñîáñòâåííîé îáúåêòíîé ìîäåëè WSH 5.6. Ñ ïîìîùüþ âíóòðåííèõ îáúåêòîâ ýòîé âåðñèè WSH èç ñöåíàðèåâ ìîæíî âûïîëíÿòü ñëåäóþùèå îñíîâíûå çàäà÷è: ? âûâîäèòü èíôîðìàöèþ â ñòàíäàðòíûé âûõîäíîé ïîòîê (íà ýêðàí) èëè â äèàëîãîâîå îêíî Windows; ? ÷èòàòü äàííûå èç ñòàíäàðòíîãî âõîäíîãî ïîòîêà (ò. å. ââîäèòü äàííûå ñ êëàâèàòóðû) èëè èñïîëüçîâàòü èíôîðìàöèþ, âûâîäèìóþ äðóãîé êîìàíäîé; ? èñïîëüçîâàòü ñâîéñòâà è ìåòîäû âíåøíèõ îáúåêòîâ, à òàêæå îáðàáàòûâàòü ñîáûòèÿ, êîòîðûå ãåíåðèðóþòñÿ ýòèìè îáúåêòàìè; ? çàïóñêàòü íîâûå íåçàâèñèìûå ïðîöåññû èëè àêòèâèçèðîâàòü óæå èìåþùèåñÿ; ? çàïóñêàòü äî÷åðíèå ïðîöåññû ñ âîçìîæíîñòüþ êîíòðîëÿ èõ ñîñòîÿíèÿ è äîñòóïà ê èõ ñòàíäàðòíûì âõîäíûì è âûõîäíûì ïîòîêàì; ? ðàáîòàòü ñ ëîêàëüíîé ñåòüþ: îïðåäåëÿòü èìÿ çàðåãèñòðèðîâàâøåãîñÿ ïîëüçîâàòåëÿ, ïîäêëþ÷àòü ñåòåâûå äèñêè è ïðèíòåðû; ? ïðîñìàòðèâàòü è èçìåíÿòü ïåðåìåííûå ñðåäû; ? ïîëó÷àòü äîñòóï ê ñïåöèàëüíûì ïàïêàì Windows; ? ñîçäàâàòü ÿðëûêè Windows; ? ðàáîòàòü ñ ñèñòåìíûì ðååñòðîì.  WSH 5.6 âõîäÿò ïåðå÷èñëåííûå íèæå îáúåêòû: ? WScript. Ýòî ãëàâíûé îáúåêò WSH, êîòîðûé ñëóæèò äëÿ ñîçäàíèÿ äðóãèõ îáúåêòîâ èëè ñâÿçè ñ íèìè, ñîäåðæèò ñâåäåíèÿ î ñåðâåðå ñöåíàðèåâ, à òàêæå ïîçâîëÿåò ââîäèòü äàííûå ñ êëàâèàòóðû è âûâîäèòü èíôîðìàöèþ íà ýêðàí èëè â îêíî Windows. ? WshArguments. Îáåñïå÷èâàåò äîñòóï êî âñåì ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ èëè ÿðëûêà Windows. ? WshNamed. Îáåñïå÷èâàåò äîñòóï ê èìåííûì ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ. ? WshUnnamed. Îáåñïå÷èâàåò äîñòóï ê áåçûìÿííûì ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ. ? WshShell. Ïîçâîëÿåò çàïóñêàòü íåçàâèñèìûå ïðîöåññû, ñîçäàâàòü ÿðëûêè, ðàáîòàòü ñ ïåðåìåííûìè ñðåäû, ñèñòåìíûì ðååñòðîì è ñïåöèàëüíûìè ïàïêàìè Windows. ? WshSpecialFolders. Îáåñïå÷èâàåò äîñòóï ê ñïåöèàëüíûì ïàïêàì Windows. ? WshShortcut. Ïîçâîëÿåò ðàáîòàòü ñ ÿðëûêàìè Windows. ? WshUrlShortcut. Ïðåäíàçíà÷åí äëÿ ðàáîòû ñ ÿðëûêàìè ñåòåâûõ ðåñóðñîâ. ? WshEnvironment. Ïðåäíàçíà÷åí äëÿ ïðîñìîòðà, èçìåíåíèÿ è óäàëåíèÿ ïåðåìåííûõ ñðåäû. ? WshNetwork. Èñïîëüçóåòñÿ ïðè ðàáîòå ñ ëîêàëüíîé ñåòüþ: ñîäåðæèò ñåòåâóþ èíôîðìàöèþ äëÿ ëîêàëüíîãî êîìïüþòåðà, ïîçâîëÿåò ïîäêëþ÷àòü ñåòåâûå äèñêè è ïðèíòåðû. ? WshScriptExec. Ïîçâîëÿåò çàïóñêàòü êîíñîëüíûå ïðèëîæåíèÿ â êà÷åñòâå äî÷åðíèõ ïðîöåññîâ, îáåñïå÷èâàåò êîíòðîëü ñîñòîÿíèÿ ýòèõ ïðèëîæåíèé è äîñòóï ê èõ ñòàíäàðòíûì âõîäíûì è âûõîäíûì ïîòîêàì. ? WshController. Ïîçâîëÿåò çàïóñêàòü ñöåíàðèè íà óäàëåííûõ ìàøèíàõ. ? WshRemote. Ïîçâîëÿåò óïðàâëÿòü ñöåíàðèåì, çàïóùåííûì íà óäàëåííîé ìàøèíå. ? WshRemoteError. Èñïîëüçóåòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè îá îøèáêå, âîçíèêøåé â ðåçóëüòàòå âûïîëíåíèÿ ñöåíàðèÿ, çàïóùåííîãî íà óäàëåííîé ìàøèíå. Êðîìå ýòîãî, èìååòñÿ îáúåêò FileSystemObject, îáåñïå÷èâàþùèé äîñòóï ê ôàéëîâîé ñèñòåìå êîìïüþòåðà (ýòîò îáúåêò áóäåò ïîäðîáíî îïèñàí â ãëàâå 5). Ïåðåéäåì òåïåðü ê ðàññìîòðåíèþ ñâîéñòâ è ìåòîäîâ âíóòðåííèõ îáúåêòîâ WSH. Çàìå÷àíèå Îáúåêò WScript Ñâîéñòâà îáúåêòà WScriptïîçâîëÿþò ïîëó÷èòü ïîëíûé ïóòü ê èñïîëüçóþùåìóñÿ ñåðâåðó ñöåíàðèåâ (wscript.exe èëè cscript.exe), ïàðàìåòðû êîìàíäíîé ñòðîêè, ñ êîòîðûìè çàïóùåí ñöåíàðèé, ðåæèì åãî ðàáîòû (èíòåðàêòèâíûé èëè ïàêåòíûé). Êðîìå ýòîãî, ñ ïîìîùüþ ñâîéñòâ îáúåêòà WScriptìîæíî âûâîäèòü èíôîðìàöèþ â ñòàíäàðòíûé âûõîäíîé ïîòîê è ÷èòàòü äàííûå èç ñòàíäàðòíîãî âõîäíîãî ïîòîêà. Òàêæå WScriptïðåäîñòàâëÿåò ìåòîäû äëÿ ðàáîòû âíóòðè ñöåíàðèÿ ñ îáúåêòàìè àâòîìàòèçàöèè è âûâîäà èíôîðìàöèè íà ýêðàí (â òåêñòîâîì ðåæèìå) èëè â îêíî Windows. Îòìåòèì, ÷òî â ñöåíàðèè WSH îáúåêò WScriptìîæíî èñïîëüçîâàòü ñðàçó, áåç êàêîãî-ëèáî ïðåäâàðèòåëüíîãî îïèñàíèÿ èëè ñîçäàíèÿ, ò. ê. åãî ýêçåìïëÿð ñîçäàåòñÿ ñåðâåðîì ñöåíàðèåâ àâòîìàòè÷åñêè. Äëÿ èñïîëüçîâàíèÿ æå âñåõ îñòàëüíûõ îáúåêòîâ íóæíî ïðèìåíÿòü ëèáî ìåòîä CreateObject, ëèáî îïðåäåëåííîå ñâîéñòâî äðóãîãî îáúåêòà. Ñâîéñòâà îáúåêòà WScriptïðåäñòàâëåíû â òàáë. 1.2. Òàáëèöà 1.2. Ñâîéñòâà îáúåêòà
Îïèøåì áîëåå ïîäðîáíî òå ñâîéñòâà îáúåêòà WScript, êîòîðûå òðåáóþò äîïîëíèòåëüíûõ ïîÿñíåíèé. Ñâîéñòâî Arguments  ñëåäóþùåì ïðèìåðå (ëèñòèíã 1.1) ñ ïîìîùüþ öèêëà for íà ýêðàí âûâîäÿòñÿ âñå ïàðàìåòðû êîìàíäíîé ñòðîêè, ñ êîòîðûìè áûë çàïóùåí ñöåíàðèé. Ëèñòèíã 1.1. Âûâîä íà ýêðàí âñåõ ïàðàìåòðîâ ñöåíàðèÿ/*******************************************************************/ /* Èìÿ: ShowArgs.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí ïàðàìåòðîâ çàïóùåííîãî ñöåíàðèÿ */ /*******************************************************************/ var i, objArgs; objArgs = WScript.Arguments; //Ñîçäàåì îáúåêò WshArguments for (i=0; i<=objArgs.Count()-1; i++) WScript.Echo(objArgs(i)); //Âûâîäèì íà ýêðàí i-é àðãóìåíò /************* Êîíåö *********************************************/ Äðóãèå ïðèìåðû ðàáîòû ñ àðãóìåíòàìè êîìàíäíîé ñòðîêè ïðèâåäåíû â ëèñòèíãàõ 1.4, 1.5, 2.22 è 2.23. Ñâîéñòâà StdErr, StdIn, StdOut Äîñòóï ê ñòàíäàðòíûì âõîäíûì è âûõîäíûì ïîòîêàì ñ ïîìîùüþ ñâîéñòâ StdIn, StdOutè StdErrìîæíî ïîëó÷èòü òîëüêî â òîì ñëó÷àå, åñëè ñöåíàðèé çàïóñêàëñÿ â êîíñîëüíîì ðåæèìå ñ ïîìîùüþ cscript.exe. Åñëè ñöåíàðèé áûë çàïóùåí ñ ïîìîùüþ wscript.exe, òî ïðè ïîïûòêå îáðàòèòüñÿ ê ýòèì ñâîéñòâàì âîçíèêíåò îøèáêà " Invalid Handle" (ðèñ. 1.9). Ðèñ. 1.9. Îøèáêà ïðè îáðàùåíèè ê StdInâ ãðàôè÷åñêîì ðåæèìå Ðàáîòàòü ñ ïîòîêàìè StdOutè StdErrìîæíî ñ ïîìîùüþ ìåòîäîâ Write, WriteLine, WriteBlankLines, à ñ ïîòîêîì StdIn— ñ ïîìîùüþ ìåòîäîâ Read, ReadLine, ReadAll, Skip, SkipLine. Ýòè ìåòîäû êðàòêî îïèñàíû â òàáë. 1.3. Òàáëèöà 1.3. Ìåòîäû äëÿ ðàáîòû ñ ïîòîêàìè
Íàïîìíèì, ÷òî îïåðàöèîííàÿ ñèñòåìà Windows ïîääåðæèâàåò ìåõàíèçì êîíâåéåðèçàöèè (ñèìâîë "|" â êîìàíäíîé ñòðîêå). Ýòîò ìåõàíèçì äåëàåò âîçìîæíûì ïåðåäà÷ó äàííûõ îò îäíîé ïðîãðàììû ê äðóãîé. Òàêèì îáðàçîì, èñïîëüçóÿ ñòàíäàðòíûå âõîäíûå è âûõîäíûå ïîòîêè, ìîæíî èç ñöåíàðèÿ îáðàáàòûâàòü ñòðîêè âûâîäà äðóãîãî ïðèëîæåíèÿ èëè ïåðåíàïðàâëÿòü âûâîäèìûå ñöåíàðèåì äàííûå íà âõîä ïðîãðàìì-ôèëüòðîâ ( FINDèëè SORT). Íàïðèìåð, ñëåäóþùàÿ êîìàíäà áóäåò ñîðòèðîâàòü ñòðîêè âûâîäà ñöåíàðèÿ example.js è âûâîäèòü èõ â ôàéë sort.txt: cscript //Nologo example.js | sort > sort.txt Îïöèÿ //Nologo çäåñü íóæíà äëÿ òîãî, ÷òîáû â ôàéë sort.txt íå ïîïàäàëè ñòðîêè ñ èíôîðìàöèåé î ðàçðàáîò÷èêå è íîìåðå âåðñèè WSH. Êðîìå ýòîãî, ñ ïîìîùüþ ìåòîäîâ, ðàáîòàþùèõ ñ âõîäíûì ïîòîêîì StdIn, ìîæíî îðãàíèçîâûâàòü äèàëîã ñ ïîëüçîâàòåëåì, ò. å. ñîçäàâàòü èíòåðàêòèâíûå ñöåíàðèè. Ïðèìåð òàêîãî ñöåíàðèÿ ïðåäñòàâëåí â ëèñòèíãå 1.2. Ëèñòèíã 1.2. Ïðèìåð èíòåðàêòèâíîãî ñöåíàðèÿ/*******************************************************************/ /* Èìÿ: Interact.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ââîä/âûâîä ñòðîê â êîíñîëüíîì ðåæèìå */ /*******************************************************************/ var s; //Âûâîäèì ñòðîêó íà ýêðàí WScript.StdOut.Write("Ââåäèòå ÷èñëî: "); //Ñ÷èòûâàåì ñòðîêó s = WScript.StdIn.ReadLine(); //Âûâîäèì ñòðîêó íà ýêðàí WScript.StdOut.WriteLine("Âû ââåëè ÷èñëî " + s); /************* Êîíåö *********************************************/ Îáúåêò WScriptèìååò íåñêîëüêî ìåòîäîâ, êîòîðûå îïèñàíû â òàáë. 1.4. Òàáëèöà 1.4. Ìåòîäû îáúåêòà
Ïðèâåäåì äîïîëíèòåëüíûå ïîÿñíåíèÿ è ïðèìåðû èñïîëüçîâàíèÿ äëÿ ìåòîäîâ, ïðèâåäåííûõ â òàáë. 1.4. Ìåòîä CreateObject Ñòðîêîâûé ïàðàìåòð CreateObject, íàçûâàåòñÿ ïðîãðàììíûì èäåíòèôèêàòîðîì îáúåêòà (Programmic Identifier, ProgID). Åñëè óêàçàí íåîáÿçàòåëüíûé ïàðàìåòð MYOBJ_", à îáúåêò ñîîáùàåò î âîçíèêíîâåíèè ñîáûòèÿ " OnBegin", òî áóäåò çàïóùåíà ôóíêöèÿ " MYOBJ_OnBegin", êîòîðàÿ äîëæíà áûòü îïèñàíà â ñöåíàðèè.  ñëåäóþùåì ïðèìåðå ìåòîä CreateObjectèñïîëüçóåòñÿ äëÿ ñîçäàíèÿ îáúåêòà WshNetwork: var WshNetwork = WScript.Createobject("WScript.Network"); Îòìåòèì, ÷òî îáúåêòû àâòîìàòèçàöèè èç ñöåíàðèåâ ìîæíî ñîçäàâàòü è áåç ïîìîùè WSH.  JScript äëÿ ýòîãî èñïîëüçóåòñÿ îáúåêò ActiveXObject, íàïðèìåð: var WshNetwork = new ActiveXObject("WScript.Network");  VBscript äëÿ ñîçäàíèÿ îáúåêòîâ ìîæåò èñïîëüçîâàòüñÿ ñïåöèàëüíàÿ ôóíêöèÿ CreateObject, íàïðèìåð: Set WshNetwork = CreateObject("WScript.Network") Îäíàêî îðãàíèçîâàòü â ñöåíàðèè îáðàáîòêó ñîáûòèé ñîçäàâàåìîãî îáúåêòà ìîæíî òîëüêî ïðè èñïîëüçîâàíèè ìåòîäà WScript.CreateObject. Ìåòîä ConnectObject Îáúåêò, ñîåäèíåíèå ñ êîòîðûì îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ìåòîäà ConnectObject, äîëæåí ïðåäîñòàâëÿòü èíòåðôåéñ ê ñâîèì ñîáûòèÿì.  ñëåäóþùåì ïðèìåðå â ïåðåìåííîé MyObjectñîçäàåòñÿ àáñòðàêòíûé îáúåêò " SomeObject", çàòåì èç ñöåíàðèÿ âûçûâàåòñÿ ìåòîä SomeMetodýòîãî îáúåêòà. Ïîñëå ýòîãî óñòàíàâëèâàåòñÿ ñâÿçü ñ ïåðåìåííîé MyObjectè çàäàåòñÿ ïðåôèêñ " MyEvent" äëÿ ïðîöåäóð îáðàáîòêè ñîáûòèÿ ýòîãî îáúåêòà. Åñëè â îáúåêòå âîçíèêíåò ñîáûòèå ñ èìåíåì " Event", òî áóäåò âûçâàíà ôóíêöèÿ MyEvent_Event. Ìåòîä DisconnectObjectîáúåêòà WScriptïðîèçâîäèò îòñîåäèíåíèå îáúåêòà MyObject. var MyObject = WScript.CreateObject("SomeObject"); MyObject.SomeMethod(); WScript.ConnectObject(MyObject, "MyEvent"); function MyEvent_Event(strName) { WScript.Echo(strName); } WScript.DisconnectObject(MyObject); Ìåòîä DisconnectObject Åñëè ñîåäèíåíèÿ ñ îáúåêòîì DisconnectObject(obj)íå áóäåò ïðîèçâîäèòü íèêàêèõ äåéñòâèé. Ïðèìåð ïðèìåíåíèÿ DisconnectObjectáûë ïðèâåäåí âûøå. Ìåòîä Echo Ïàðàìåòðû Echoíàïðàâëÿåò âûâîä â äèàëîãîâîå îêíî, åñëè æå äëÿ âûïîëíåíèÿ ñöåíàðèÿ ïðèìåíÿåòñÿ cscript.exe, òî âûâîä áóäåò íàïðàâëåí íà ýêðàí (êîíñîëü). Êàæäûé èç àðãóìåíòîâ ïðè âûâîäå áóäåò ðàçäåëåí ïðîáåëîì.  ñëó÷àå èñïîëüçîâàíèÿ cscript.exe âûâîä âñåõ àðãóìåíòîâ áóäåò çàâåðøåí ñèìâîëîì íîâîé ñòðîêè. Åñëè â ìåòîäå Echo íå çàäàí íè îäèí àðãóìåíò, òî áóäåò íàïå÷àòàíà ïóñòàÿ ñòðîêà. Íàïðèìåð, ïîñëå âûïîëíåíèÿ ñöåíàðèÿ EchoExample.js (ëèñòèíã 1.3) ñ ïîìîùüþ cscript.exe íà ýêðàí áóäóò âûâåäåíû ïóñòàÿ ñòðîêà, òðè ÷èñëà è ñòðîêà òåêñòà (ðèñ. 1.10). Ëèñòèíã 1.3. Ñöåíàðèé EchoExample.js/*******************************************************************/ /* Èìÿ: EchoExample.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Èñïîëüçîâàíèå ìåòîäà WScript.Echo */ /*******************************************************************/ WScript.Echo(); //Âûâîäèì ïóñòóþ ñòðîêó WScript.Echo(1,2,3); //Âûâîäèì ÷èñëà WScript.Echo("Ïðèâåò!"); //Âûâîäèì ñòðîêó /************* Êîíåö *********************************************/ Ðèñ. 1.10. Âûâîä èíôîðìàöèè ñ ïîìîùüþ ìåòîäà Echo Äðóãèå ïðèìåðû èñïîëüçîâàíèÿ ìåòîäà Echoïðèâåäåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.1, 2.2, 2.4 è 2.5). Ìåòîä Sleep  ñëåäóþùåì ïðèìåðå ñöåíàðèé ïåðåâîäèòñÿ â íåàêòèâíîå ñîñòîÿíèå íà 5 ñåêóíä: WScript.Echo("Ñöåíàðèé çàïóùåí, îòäûõàåì..."); WScript.Sleep(5000); WScript.Echo("Âûïîëíåíèå çàâåðøåíî"); Ìåòîä Sleepíåîáõîäèìî ïðèìåíÿòü ïðè àñèíõðîííîé ðàáîòå ñöåíàðèÿ è êàêîé-ëèáî äðóãîé çàäà÷è, íàïðèìåð, ïðè èìèòàöèè íàæàòèé êëàâèø â àêòèâíîì îêíå ñ ïîìîùüþ ìåòîäà WshShell.SendKeys(ñì. ëèñòèíãè 1.13, 2.31, 2.32). Îáúåêòû-êîëëåêöèè  WSH âõîäÿò îáúåêòû, ñ ïîìîùüþ êîòîðûõ ìîæíî ïîëó÷èòü äîñòóï ê êîëëåêöèÿì, ñîäåðæàùèì ñëåäóþùèå ýëåìåíòû: ? ïàðàìåòðû êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ èëè ÿðëûêà Windows (îáúåêòû WshArguments, WshNamedè WshUnnamed); ? çíà÷åíèÿ ïåðåìåííûõ ñðåäû (îáúåêò WshEnvironment); ? ïóòè ê ñïåöèàëüíûì ïàïêàì Windows (îáúåêò WshSpecialFolders). Îáúåêò WshArguments Îáúåêò WshArgumentsñîäåðæèò êîëëåêöèþ âñåõ ïàðàìåòðîâ êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ èëè ÿðëûêà Windows. Ýòîò îáúåêò ìîæíî ñîçäàòü òîëüêî ñ ïîìîùüþ ñâîéñòâà Argumentsîáúåêòîâ WScriptè WshShortcut.  ïðèíöèïå, ðàáîòàòü ñ ýëåìåíòàìè êîëëåêöèè WshArgumentsìîæíî ñòàíäàðòíûì äëÿ JScript îáðàçîì — ñîçäàòü îáúåêò Enumeratorè èñïîëüçîâàòü åãî ìåòîäû moveNext, itemè atEnd. Íàïðèìåð, âûâåñòè íà ýêðàí âñå ïàðàìåòðû êîìàíäíîé ñòðîêè, ñ êîòîðûìè çàïóùåí ñöåíàðèé, ìîæíî ñëåäóþùèì îáðàçîì (ëèñòèíã 1.4). Ëèñòèíã 1.4. Âûâîä âñåõ ïàðàìåòðîâ ñöåíàðèÿ (ñòàíäàðòíûå êîëëåêöèè JScript) /********************************************************************/ /* Èìÿ: EnumArgs.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí ïàðàìåòðîâ çàïóùåííîãî ñöåíàðèÿ */ /********************************************************************/ var objArgs, e, x; objArgs = WScript.Arguments; //Ñîçäàåì îáúåêò WshArguments //Ñîçäàåì îáúåêò Enumerator äëÿ êîëëåêöèè objArgs e = new Enumerator(objArgs); for (;!e.atEnd();e.moveNext()) { x = e.item(); //Ïîëó÷àåì çíà÷åíèå ýëåìåíòà êîëëåêöèè WScript.Echo(x); //Âûâîäèì çíà÷åíèå ïàðàìåòðà íà ýêðàí } /************* Êîíåö *********************************************/ Îäíàêî íàìíîãî óäîáíåå èñïîëüçîâàòü ìåòîäû Countè Itemñàìîãî îáúåêòà WshArguments(ìåòîä Itemèìååòñÿ ó âñåõ êîëëåêöèé WSH). Ìåòîä Countâîçâðàùàåò ÷èñëî ýëåìåíòîâ â êîëëåêöèè, ò. å. êîëè÷åñòâî àðãóìåíòîâ êîìàíäíîé ñòðîêè, à ìåòîä Item(n)— çíà÷åíèå n-ãî ýëåìåíòà êîëëåêöèè (íóìåðàöèÿ íà÷èíàåòñÿ ñ íóëÿ). Áîëåå òîãî, ÷òîáû ïîëó÷èòü çíà÷åíèå îòäåëüíîãî ýëåìåíòà êîëëåêöèè WshArguments, ìîæíî ïðîñòî óêàçàòü åãî èíäåêñ â êðóãëûõ ñêîáêàõ ïîñëå èìåíè îáúåêòà. Çàìå÷àíèå Òàêèì îáðàçîì, ïðåäûäóùèé ïðèìåð ìîæíî ïåðåïèñàòü áîëåå êîìïàêòíûì îáðàçîì (ëèñòèíã 1.5). Ëèñòèíã 1.5. Âûâîä âñåõ ïàðàìåòðîâ ñöåíàðèÿ (ìåòîäû WSH)/*******************************************************************/ /* Èìÿ: ShowArgs.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí ïàðàìåòðîâ çàïóùåííîãî ñöåíàðèÿ */ /*******************************************************************/ var i, objArgs; objArgs = WScript.Arguments; //Ñîçäàåì îáúåêò WshArguments for (i=0; i<=objArgs.Count()-1; i++) WScript.Echo(objArgs(i)); //Âûâîäèì íà ýêðàí i-é àðãóìåíò /************* Êîíåö *********************************************/ Ñ ïîìîùüþ îáúåêòà WshArgumentsìîæíî òàêæå âûäåëÿòü è îòäåëüíî îáðàáàòûâàòü àðãóìåíòû ñöåíàðèÿ, ó êîòîðûõ èìåþòñÿ èìåíà (íàïðèìåð, /Name:Andrey) è áåçûìÿííûå àðãóìåíòû. ßñíî, ÷òî èñïîëüçîâàíèå èìåííûõ ïàðàìåòðîâ áîëåå óäîáíî, ò. ê. â ýòîì ñëó÷àå íåò íåîáõîäèìîñòè çàïîìèíàòü, â êàêîì ïîðÿäêå äîëæíû áûòü çàïèñàíû ïàðàìåòðû ïðè çàïóñêå òîãî èëè èíîãî ñöåíàðèÿ. Äëÿ äîñòóïà ê èìåííûì è áåçûìÿííûì àðãóìåíòàì èñïîëüçóþòñÿ ñîîòâåòñòâåííî äâà ñïåöèàëüíûõ ñâîéñòâà îáúåêòà WshArguments: Namedè Unnamed. Ñâîéñòâî Namedñîäåðæèò ññûëêó íà êîëëåêöèþ WshNamed, ñâîéñòâî Unnamed— íà êîëëåêöèþ WshUnnamed. Òàêèì îáðàçîì, îáðàáàòûâàòü ïàðàìåòðû êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ ìîæíî òðåìÿ ñïîñîáàìè: ? ïðîñìàòðèâàòü ïîëíûé íàáîð âñåõ ïàðàìåòðîâ (êàê èìåííûõ, òàê è áåçûìÿííûõ) ñ ïîìîùüþ êîëëåêöèè WshArguments; ? âûäåëèòü òîëüêî òå ïàðàìåòðû, ó êîòîðûõ åñòü èìåíà (èìåííûå ïàðàìåòðû) ñ ïîìîùüþ êîëëåêöèè WshNamed; ? âûäåëèòü òîëüêî òå ïàðàìåòðû, ó êîòîðûõ íåò èìåí (áåçûìÿííûå ïàðàìåòðû) ñ ïîìîùüþ êîëëåêöèè WshUnnamed. Ó îáúåêòà WshArgumentsèìååòñÿ åùå îäèí ìåòîä ShowUsage. Ýòîò ìåòîä ñëóæèò äëÿ âûâîäà íà ýêðàí èíôîðìàöèè î çàïóùåííîì ñöåíàðèè (îïèñàíèå àðãóìåíòîâ êîìàíäíîé ñòðîêè, ïðèìåð çàïóñêà ñöåíàðèÿ è ò.ä.).  ñâîþ î÷åðåäü, ïîäîáíóþ èíôîðìàöèþ ìîæíî çàäàòü òîëüêî ïðè èñïîëüçîâàíèè WSH-ñöåíàðèåâ ñ ðàçìåòêîé XML; áîëåå ïîäðîáíî î ïðèìåíåíèè ìåòîäà ShowUsageèäåò ðå÷ü â ãëàâå 3 ïðè ðàññìîòðåíèè ýëåìåíòîâ <runtime>, <description>, <example>, <named>è <unnamed>. Îáúåêò WshNamed Îáúåêò WshNamedñîäåðæèò êîëëåêöèþ ïàðàìåòðîâ êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ, ó êîòîðûõ èìååòñÿ óíèêàëüíîå èìÿ (èìåííûå ïàðàìåòðû).  WSH 5.6 èìåííîé ïàðàìåòð âñåãäà íà÷èíàåòñÿ ñ ñèìâîëà "/", ïîñëå ÷åãî ïðèâîäèòñÿ èìÿ ýòîãî ïàðàìåòðà, çàòåì ñòàâèòñÿ äâîåòî÷èå ":" è ïèøåòñÿ çíà÷åíèå ïàðàìåòðà, íàïðèìåð: /Name:Andrey  êà÷åñòâå çíà÷åíèÿ èìåííîãî ïàðàìåòðà ðàññìàòðèâàåòñÿ íàáîð ñèìâîëîâ, íà÷èíàþùèõñÿ ïîñëå äâîåòî÷èÿ è çàêàí÷èâàþùèõñÿ ïåðåä ïåðâûì âñòðåòèâøèìñÿ ïðîáåëîì. Äëÿ òîãî ÷òîáû çíà÷åíèåì ïàðàìåòðà êîìàíäíîé ñòðîêè áûëà ñòðîêà, ñîñòîÿùàÿ èç íåñêîëüêèõ ñëîâ, íåîáõîäèìî çàêëþ÷èòü ýòó ñòðîêó â êàâû÷êè. Íàïðèìåð: /Name:"Andrey Popov" Ñîçäàåòñÿ îáúåêò WshNamed ñ ïîìîùüþ ñâîéñòâà Namedêîëëåêöèè WshArguments. Äëÿ òîãî ÷òîáû ïîëó÷èòü çíà÷åíèå îïðåäåëåííîãî àðãóìåíòà, åãî èìÿ èñïîëüçóåòñÿ â êà÷åñòâå èíäåêñà êîëëåêöèè. Çàìå÷àíèå Íàïðèìåð, ïóñòü ñöåíàðèé MyScript.js çàïóùåí ñ äâóìÿ èìåííûìè ïàðàìåòðàìè: MyScript.js /User:Andrey /Computer:Server1 Òîãäà âûâåñòè íà ýêðàí çíà÷åíèå ïàðàìåòðîâ Name è Computer ìîæíî äâóìÿ ñïîñîáàìè: var objNamedArgs; objNamedArgs=WScript.Arguments.Named; WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+objNamedArgs.Item("User")); WScript.Echo("Èìÿ êîìïüþòåðà: "+objNamedArgs.Item ("Computer")); èëè ïðîñòî var objNamedArgs; objNamedArgs=WScript.Arguments.Named; WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+objNamedArgs("User")); WScript.Echo("Èìÿ êîìïüþòåðà: "+objNamedArgs("Computer")); Îòìåòèì òàêæå, ÷òî çíà÷åíèåì èìåííîãî ïàðàìåòðà, êàê è áåçûìÿííîãî, ìîæåò ñëóæèòü öåëàÿ ñòðîêà, ñîñòîÿùàÿ èç íåñêîëüêèõ ëèòåðàëîâ è çàêëþ÷åííàÿ â êàâû÷êè, íàïðèìåð: MyScript.js /User:"Andrey Popov" /Computer:Server1 Òîãäà â ðåçóëüòàòå âûïîëíåíèÿ â ñöåíàðèè MyScript.js ñëåäóþùåé ñòðîêè: WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+ WScript.Arguments.Named("User")); íà ýêðàí áóäåò âûâåäåíî Èìÿ ïîëüçîâàòåëÿ: Andrey Popov Äëÿ òîãî ÷òîáû óçíàòü, áûë ëè óêàçàí ïðè çàïóñêå ñöåíàðèÿ òîò èëè èíîé èìåííîé ïàðàìåòð, èñïîëüçóåòñÿ ìåòîä Existsîáúåêòà WshNamed. Íàïðèìåð, if (WScript.Arguments.Named.Exists("User")) WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+ WScript.Arguments.Named("User")); Ïðèìåðû, èëëþñòðèðóþùèå èñïîëüçîâàíèå îáúåêòà WshNamed, ïðèâåäåíû òàêæå â ãëàâå 2 (ñì. ëèñòèíãè 2.22 è 2.23). Îáúåêò WshUnnamed  êîëëåêöèè WshUnnamedñîäåðæàòñÿ ïàðàìåòðû êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ, ó êîòîðûõ íåò èìåíè (áåçûìÿííûå ïàðàìåòðû). Ñîçäàåòñÿ ýòîò îáúåêò ñ ïîìîùüþ ñâîéñòâà Unnamedêîëëåêöèè WshArguments. Äëÿ òîãî ÷òîáû ïîëó÷èòü çíà÷åíèå îïðåäåëåííîãî àðãóìåíòà, åãî íîìåð èñïîëüçóåòñÿ â êà÷åñòâå èíäåêñà êîëëåêöèè (íóìåðàöèÿ íà÷èíàåòñÿ ñ íóëÿ). Çàìå÷àíèå Íàïðèìåð, ñöåíàðèé MyScript.js çàïóùåí ñ äâóìÿ áåçûìÿííûìè ïàðàìåòðàìè: MyScript.js "Andrey Popov" Server1 Òîãäà ïîñëå âûïîëíåíèÿ â ñöåíàðèè MyScript.js ëþáîãî èç ñëåäóþùèõ äâóõ áëîêîâ: var objUnnamedArgs; obUnnamedArgs=WScript.Arguments.Unnamed; WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+objUnnamedArgs.Item(0)); WScript.Echo("Èìÿ êîìïüþòåðà: "+objUnnamedArgs.Item(1)); èëè var objUnnamedArgs; obUnnamedArgs=WScript.Arguments.Unnamed; WScript.Echo("Èìÿ ïîëüçîâàòåëÿ: "+objUnnamedArgs(0)); WScript.Echo("Èìÿ êîìïüþòåðà: "+objUnnamedArgs(1)); íà ýêðàí âûâåäóòñÿ ñëåäóþùèå ñòðîêè: Èìÿ ïîëüçîâàòåëÿ: Andrey Popov Èìÿ êîìïüþòåðà: Server1 Ïðèìåðû, èëëþñòðèðóþùèå èñïîëüçîâàíèå îáúåêòà WshUnnamed, ïðèâåäåíû òàêæå â ãëàâå 2 (ñì. ëèñòèíãè 2.22 è 2.23). Îáúåêò WshEnvironment Îáúåêò WshEnvironmentïîçâîëÿåò ïîëó÷èòü äîñòóï ê êîëëåêöèè, ñîäåðæàùåé ïåðåìåííûå ñðåäû çàäàííîãî òèïà (ïåðåìåííûå ñðåäû îïåðàöèîííîé ñèñòåìû, ïåðåìåííûå ñðåäû ïîëüçîâàòåëÿ èëè ïåðåìåííûå ñðåäû òåêóùåãî êîìàíäíîãî îêíà). Ýòîò îáúåêò ìîæíî ñîçäàòü ñ ïîìîùüþ ñâîéñòâà Environmentîáúåêòà WshShellèëè îäíîèìåííîãî åãî ìåòîäà: var WshShell=WScript.Createobject("WScript.Shell"), WshSysEnv=WshShell.Environment, WshUserEnv=WshShell.Environment("User"); Îáúåêò WshEnvironmentèìååò ñâîéñòâî Length, â êîòîðîì õðàíèòñÿ ÷èñëî ýëåìåíòîâ â êîëëåêöèè (êîëè÷åñòâî ïåðåìåííûõ ñðåäû), è ìåòîäû Countè Item. Äëÿ òîãî ÷òîáû ïîëó÷èòü çíà÷åíèå îïðåäåëåííîé ïåðåìåííîé ñðåäû, â êà÷åñòâå àðãóìåíòà ìåòîäà Itemóêàçûâàåòñÿ èìÿ ýòîé ïåðåìåííîé â äâîéíûõ êàâû÷êàõ.  ñëåäóþùåì ïðèìåðå ìû âûâîäèì íà ýêðàí çíà÷åíèå ïåðåìåííîé ñðåäû PATH: var WshShell=WScript.CreateObject("WScript.Shell"), WshSysEnv=WshShell.Environment; WScript.Echo("Ñèñòåìíûé ïóòü:", WshSysEnv.Item("PATH")); Ìîæíî òàêæå ïðîñòî óêàçàòü èìÿ ïåðåìåííîé â êðóãëûõ ñêîáêàõ ïîñëå èìåíè îáúåêòà: WScript.Echo("Ñèñòåìíûé ïóòü:",WshSysEnv("PATH"); Êðîìå ýòîãî, ó îáúåêòà WshEnvironment èìååòñÿ ìåòîä Remove(strName), êîòîðûé óäàëÿåò çàäàííóþ ïåðåìåííóþ ñðåäû. Íàïðèìåð, â ëèñòèíãå 1.6 ïðèâåäåí ñöåíàðèé, êîòîðûé óäàëÿåò äâå ïåðåìåííûå ( EXAMPLE_1è EXAMPLE_2) èç îêðóæåíèÿ ñðåäû ïîëüçîâàòåëÿ. Çàìå÷àíèåËèñòèíã 1.6. Óäàëåíèå ïåðåìåííûõ ñðåäû /*******************************************************************/ /* Èìÿ: RemEnv.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Óäàëåíèå äâóõ ïåðåìåííûõ ñðåäû */ /*******************************************************************/ //Ñîçäàåì îáúåêò WshShell var WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì îáúåêò WshEnvironment var WshUsrEnv = WshShell.Environment("User"); //Óäàëÿåì ïåðåìåííûå ñðåäû WshUsrEnv.Remove("EXAMPLE_1"); WshUsrEnv.Remove("EXAMPLE_2"); /************* Êîíåö *********************************************/ Îáúåêò WshSpecialFolders Îáúåêò WshSpecialFoldersîáåñïå÷èâàåò äîñòóï ê êîëëåêöèè, ñîäåðæàùåé ïóòè ê ñïåöèàëüíûì ïàïêàì Windows (íàïðèìåð, ê ðàáî÷åìó ñòîëó èëè ê ìåíþ Ïóñê (Start)); çàäàíèå ïóòåé ê òàêèì ïàïêàì ìîæåò áûòü íåîáõîäèìî, íàïðèìåð, äëÿ ñîçäàíèÿ íåïîñðåäñòâåííî èç ñöåíàðèÿ ÿðëûêîâ íà ðàáî÷åì ñòîëå.  Windows 9õ ïîääåðæèâàþòñÿ ñëåäóþùèå èìåíà ñïåöèàëüíûõ ïàïîê: ? Desktop; ? Favorites; ? Fonts; ? MyDocuments; ? NetHood; ? PrintHood; ? Programs; ? Recent; ? SendTo; ? StartMenu; ? Startup; ? Templates.  Windows NT/2000/XP äîïîëíèòåëüíî ìîæíî ïîëó÷èòü äîñòóï åùå ê ÷åòûðåì ïàïêàì, êîòîðûå õðàíÿò äàííûå äëÿ âñåõ ïîëüçîâàòåëåé: ? AllUsersDesktop; ? AllUsersStartMenu; ? AllUsersPrograms; ? AllUsersStartup. Îáúåêò WshSpecialFoldersñîçäàåòñÿ c ïîìîùüþ ñâîéñòâà SpecialFoldersîáúåêòà WshShell: var WshShell=WScript.CreateObject("WScript.Shell"), WshSpecFold=WshShell.SpecialFolders; Êàê è ïî÷òè âñå êîëëåêöèè WSH, îáúåêò WshSpecialFoldersèìååò ñâîéñòâî Lengthè ìåòîäû Countè Item. Äîñòóï ê îòäåëüíîìó ýëåìåíòó ïðîèçâîäèòñÿ ëèáî ÷åðåç èìÿ ñîîòâåòñòâóþùåé ïàïêè, ëèáî ÷åðåç ÷èñëîâîé èíäåêñ (Ëèñòèíã 1.7). Ëèñòèíã 1.7. Îáðàáîòêà êîëëåêöèè WshSpecialFolders /*******************************************************************/ /* Èìÿ: ShowSpecFold.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí íàçâàíèé ñïåöèàëüíûõ ïàïîê Windows */ /* (êîëëåêöèÿ WshSpecialFolders) */ /*******************************************************************/ var WshShell, WshFldrs, i; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("Wscript.Shell"); //Ñîçäàåì îáúåêò WshSpecialFolders WshFldrs = WshShell.SpecialFolders; WScript.Echo("Íåêîòîðûå ñïåöèàëüíûå ïàïêè..."); //Âûâîäèì ïóòü ê ïàïêå Desktop WScript.Echo("Desktop="+ WshFldrs.item("Desktop")); //Âûâîäèì ïóòü ê ïàïêå Favorities WScript.Echo("Favorites="+ WshFldrs("Favorites")); //Âûâîäèì ïóòü ê ïàïêå Programs WScript.Echo("Programs="+ WshFldrs("Programs")); WScript.Echo(""); WScript.Echo("Ñïèñîê âñåõ ñïåöèàëüíûõ ïàïîê..."); for (i=0;i<= WshFldrs.Count()-1;i++){ //Âûâîäèì íà ýêðàí i-é ýëåìåíò êîëëåêöèè WshFldrs WScript.Echo(WshFldrs(i)); } /************* Êîíåö *********************************************/ Äðóãèå ïðèìåðû ðàáîòû ñî ñïåöèàëüíûìè ïàïêàìè Windows ïðèâåäåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.39–2.42). Ðàáîòà ñ ñåòüþ è îáîëî÷êîé Windows Äëÿ ðàáîòû ñ ëîêàëüíîé ñåòüþ è îáîëî÷êîé Windows (ñïåöèàëüíûå ïàïêè, ïåðåìåííûå ñðåäû, ñèñòåìíûé ðååñòð) ïðåäíàçíà÷åíû ñîîòâåòñòâåííî îáúåêòû WshNetworkè WshShell. Îáúåêò WshNetwork Îáúåêò WshNetworkïðåäíàçíà÷åí äëÿ ðàáîòû ñ ðåñóðñàìè ëîêàëüíîé ñåòè; ñ ïîìîùüþ ìåòîäîâ ýòîãî îáúåêòà ìîæíî ïîäêëþ÷àòü è îòêëþ÷àòü ñåòåâûå äèñêè è ïðèíòåðû. Îáúåêò WshNetworkñîçäàåòñÿ ñëåäóþùèì îáðàçîì: var objNet=WScript.CreateObject("WScript.Network"); Ñâîéñòâà äàííîãî îáúåêòà ïðèâåäåíû â òàáë. 1.5. Òàáëèöà 1.5. Ñâîéñòâà îáúåêòà
Ëèñòèíã 1.8. Ïðèìåð èñïîëüçîâàíèÿ îáúåêòà WshNetwork /*******************************************************************/ /* Èìÿ: ShowNetwork.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí ñåòåâîãî èìåíè êîìïüþòåðà è èìåíè */ /* ïîëüçîâàòåëÿ */ /*******************************************************************/ var objNet; //Ñîçäàåì îáúåêò WshNetwork objNet = WScript.CreateObject("WScript.Network"); //Âûâîäèì íà ýêðàí ñâîéñòâà ComputerName è UserName WScript.Echo("Èìÿ ìàøèíû:",objNet.ComputerName); WScript.Echo("Èìÿ ïîëüçîâàòåëÿ:",objNet.UserName); /************* Êîíåö *********************************************/ Ìåòîäû îáúåêòà WshNetworkîïèñàíû â òàáë. 1.6. Òàáëèöà 1.6. Ìåòîäû îáúåêòà
Îïèøåì ìåòîäû èç òàáë. 1.6 áîëåå ïîäðîáíî. Ìåòîä AddPrinterConnection Åñëè íåîáÿçàòåëüíûé ïàðàìåòð True, òî ñîçäàâàåìîå ñåòåâîå ïîäêëþ÷åíèå áóäåò ñîõðàíåíî â ïðîôèëå ïîëüçîâàòåëÿ. Ïàðàìåòðû  ñëåäóþùåì ïðèìåðå ìåòîä AddPrinterConnectionïðèìåíÿåòñÿ äëÿ ïîäêëþ÷åíèÿ ïðèíòåðà ñ ñåòåâûì èìåíåì \\Server1\Epsonê ëîêàëüíîìó ïîðòó LPT1: var WshNetwork = CreateObject("WScript.Network"); WshNetwork.AddPrinterConnection("LPT1", "\\Server1\Epson"); Ìåòîä AddWindowsPrinterConnection Ïàðàìåòð Ïàðàìåòð LPT1).  Windows NT/2000/XP ïàðàìåòð strPortèãíîðèðóåòñÿ.  ñëåäóþùåì ïðèìåðå ìåòîä AddWindowsPrinterConnectionïðèìåíÿåòñÿ äëÿ ïîäêëþ÷åíèÿ ñåòåâîãî ïðèíòåðà ê ëîêàëüíîìó ïîðòó LPT1(ïî óìîë÷àíèþ): var WshNetwork=CreateObject("WScript.Network"); PrinterPath="\\printserv\DefaultPrinter"; PrinterDriver="Lexmark Optra S 1650"; WshNetwork.AddwindowsPrinterConnection(PrinterPath, PrinterDriver); Ìåòîä EnumNetworkDrives Ýëåìåíòàìè âîçâðàùàåìîé êîëëåêöèè ÿâëÿþòñÿ áóêâû, îáîçíà÷àþùèå èìåþùèåñÿ ñåòåâûå äèñêè è ñåòåâûå èìåíà ðåñóðñîâ, ê êîòîðûì ýòè äèñêè ïîäêëþ÷åíû. Ïåðâûì ýëåìåíòîì êîëëåêöèè ÿâëÿåòñÿ áóêâà, âòîðûì — ñåòåâîå èìÿ; ýòà ïîñëåäîâàòåëüíîñòü ñîõðàíÿåòñÿ äëÿ âñåõ ñåòåâûõ äèñêîâ â êîëëåêöèè.  ñëåäóþùåì ïðèìåðå íà ýêðàí âûâîäÿòñÿ áóêâû, îáîçíà÷àþùèå âñå ñåòåâûå äèñêè è èìåíà ðåñóðñîâ, ê êîòîðûì îíè ïîäêëþ÷åíû (ëèñòèíã 1.9). Ëèñòèíã 1.9. Ïðèìåð èñïîëüçîâàíèÿ ìåòîäàEnumNetworkDrives /*******************************************************************/ /* Èìÿ: ShowNetDrives.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí áóêâ ñåòåâûõ äèñêîâ è èìåí */ /* ñîîòâåòñòâóþùèõ ðåñóðñîâ */ /*******************************************************************/ var WshNetwork,oDrives,i; //Ñîçäàåì îáúåêò WshNetwork WshNetwork = WScript.CreateObject("WScript.Network"); //Ñîçäàåì êîëëåêöèþ ñ èíôîðìàöèåé î ñåòåâûõ äèñêàõ oDrives = WshNetwork.EnumNetworkDrives(); for (i=0; i<=oDrives.Count()-1; i++) WScript.Echo(oDrives.Item(i)); //Âûâîä i-ãî ýëåìåíòà êîëëåêöèè /************* Êîíåö *********************************************/ Ìåòîä EnumPrinterConnections Ýëåìåíòàìè âîçâðàùàåìîé êîëëåêöèè ÿâëÿþòñÿ íàçâàíèÿ ëîêàëüíûõ ïîðòîâ è ñåòåâûå èìåíà ïðèíòåðîâ, ñâÿçàííûõ ñ ýòèìè ïîðòàìè. Ñàìà êîëëåêöèÿ îðãàíèçîâàíà òàê æå, êàê è êîëëåêöèÿ, âîçâðàùàåìàÿ ìåòîäîì EnumNetworkDrives.  ñëåäóþùåì ïðèìåðå íà ýêðàí âûâîäÿòñÿ íàçâàíèÿ âñåõ ïåðåíàçíà÷åííûõ ïîðòîâ è èìåíà ñåòåâûõ ðåñóðñîâ, ñ êîòîðûìè îíè ñâÿçàíû (ëèñòèíã 1.10). Ëèñòèíã 1.10. Ïðèìåð èñïîëüçîâàíèÿ ìåòîäàEnumPrinterConnections /*******************************************************************/ /* Èìÿ: ShowNetPrn.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä íà ýêðàí ïåðåíàçíà÷åííûõ ïîðòîâ è èìåí */ /* ñîîòâåòñòâóþùèõ ðåñóðñîâ */ /*******************************************************************/ //Ñîçäàåì îáúåêò WshNetwork var WshNetwork = WScript.CreateObject("WScript.Network"); //Ñîçäàåì êîëëåêöèþ ñ èíôîðìàöèåé î ïîäêëþ÷åííûõ ïðèíòåðàõ var oPrinters = WshNetwork.EnumPrinterConnections(); for (i=0; i<=oPrinters.Count()-1; i++) WScript.Echo(oPrinters.Item(i)); //Âûâîä i-ãî ýëåìåíòà êîëëåêöèè /************* Êîíåö *********************************************/ Ìåòîä MapNetworkDrive Åñëè íåîáÿçàòåëüíûé ïàðàìåòð True, òî ñîçäàâàåìîå ñåòåâîå ïîäêëþ÷åíèå áóäåò ñîõðàíåíî â ïðîôèëå ïîëüçîâàòåëÿ. Ïàðàìåòðû  ñëåäóþùåì ïðèìåðå äèñê " z" ïîäêëþ÷àåòñÿ ê ñåòåâîìó ðåñóðñó \\Server1\Programs: var WshNetwork = WScript.CreateObject("WScript.Network"); WshNetwork.MapNetworkDrive("Z:","\\Server1\Programs"); Ìåòîä RemoveNetworkDrive  êà÷åñòâå ïàðàìåòðà Åñëè íåîáÿçàòåëüíûé ïàðàìåòð True, òî îòêëþ÷åíèå ñåòåâîãî ðåñóðñà áóäåò ïðîèçâåäåíî âíå çàâèñèìîñòè îò òîãî, èñïîëüçóåòñÿ ýòîò ðåñóðñ â íàñòîÿùåå âðåìÿ èëè íåò. Åñëè íåîáÿçàòåëüíûé ïàðàìåòð True, òî îòêëþ÷àåìîå ñåòåâîå ïîäêëþ÷åíèå áóäåò óäàëåíî èç ïðîôèëÿ ïîëüçîâàòåëÿ.  ñëåäóþùåì ïðèìåðå ïðîèçâîäèòñÿ ïîäêëþ÷åíèå äèñêà "z" ê ñåòåâîìó ðåñóðñó, à çàòåì îòêëþ÷åíèå ýòîãî ðåñóðñà (ëèñòèíã 1.11). Ëèñòèíã 1.11. Ïðèìåð ïîäêëþ÷åíèÿ è îòêëþ÷åíèÿ ñåòåâîãî äèñêà/*******************************************************************/ /* Èìÿ: MapDrive.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ïîäêëþ÷åíèå/îòêëþ÷åíèå ñåòåâîãî ðåñóðñà */ /*******************************************************************/ //Ñîçäàåì îáúåêò WshNetwork var WshNetwork = WScript.CreateObject("WScript.Network"); //Ïîäêëþ÷àåì ñåòåâîé äèñê Z:\ ê \\Server1\Programs WshNetwork.MapNetworkDrive("Z:","\\Server1\Programs"); //Îòêëþ÷àåì ñåòåâîé äèñê Z:\ WshNetwork.RemoveNetworkDrive("Z:"); /************* Êîíåö *********************************************/ Ìåòîä RemovePrinterConnection  êà÷åñòâå ïàðàìåòðà Ïàðàìåòðû RemoveNetworkDrive.  ñëåäóþùåì ïðèìåðå îòêëþ÷àåòñÿ ñåòåâîé ïðèíòåð, êîòîðûé áûë íàçíà÷åí íà ïîðò LPT1: var WshNetwork = WScript.CreateObject("WScript.Network"); WshNetwork.RemovePrinterConnection("LPT1:"); Ìåòîä SetDefaultPrinter Ïàðàìåòð  ñëåäóþùåì ïðèìåðå ñ ïîìîùüþ ìåòîäà AddPrinterConnectionê ïîðòó LPT1: ïîäêëþ÷àåòñÿ ñåòåâîé ïðèíòåð \\Server1\Epson, êîòîðûé çàòåì óñòàíàâëèâàåòñÿ ïðèíòåðîì ïî óìîë÷àíèþ (ëèñòèíã 1.12). Ëèñòèíã 1.12. Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà SetDefaultPrinter /*******************************************************************/ /* Èìÿ: DefPrn.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Óñòàíîâêà ïðèíòåðà ïî óìîë÷àíèþ */ /*******************************************************************/ //Ñîçäàåì îáúåêò WshNetwork var WshNetwork = WScript.CreateObject("WScript.Network"); //Ïîäêëþ÷àåì ê LPT1 ñåòåâîé ïðèíòåð \\Server1\Epson WshNetwork.AddPrinterConnection("LPT1:","\\Server1\Epson"); //Óñòàíàâëèâàåì ïðèíòåð ïî óìîë÷àíèþ WshNetwork.SetDefaultPrinter("\\Server1\Epson"); /************* Êîíåö *********************************************/ Äðóãèå ïðèìåðû, èëëþñòðèðóþùèå èñïîëüçîâàíèå îáúåêòà WshNetwork, ïðèâåäåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.47–2.52). Îáúåêò WshShell Ñ ïîìîùüþ îáúåêòà WshShellìîæíî çàïóñêàòü íîâûé ïðîöåññ, ñîçäàâàòü ÿðëûêè, ðàáîòàòü ñ ñèñòåìíûì ðååñòðîì, ïîëó÷àòü äîñòóï ê ïåðåìåííûì ñðåäû è ñïåöèàëüíûì ïàïêàì Windows. Ñîçäàåòñÿ ýòîò îáúåêò ñëåäóþùèì îáðàçîì: var WshShell=WScript.CreateObject("WScript.Shell"); Îáúåêò WshShellèìååò òðè ñâîéñòâà, êîòîðûå ïðèâåäåíû â òàáë. 1.7. Òàáëèöà 1.7. Ñâîéñòâà îáúåêòà
Îïèøåì òåïåðü ìåòîäû, èìåþùèåñÿ ó îáúåêòà WshShell(òàáë. 1.8). Òàáëèöà 1.8. Ìåòîäû îáúåêòà
Ðàññìîòðèì ìåòîäû, ïðèâåäåííûå â òàáë. 1.8, áîëåå ïîäðîáíî. Ìåòîä ÀððActivate Ìåòîä AppActivateàêòèâèçèðóåò óæå çàïóùåííîå óêàçàííîå ïðèëîæåíèå (óñòàíàâëèâàåò íà íåãî ôîêóñ), íî íå ïðîèçâîäèò íèêàêèõ äåéñòâèé ïî èçìåíåíèþ ðàçìåðîâ åãî îêíà. Äëÿ òîãî ÷òîáû ïåðâîíà÷àëüíî çàïóñòèòü íóæíîå ïðèëîæåíèå è îïðåäåëèòü âèä åãî îêíà, ñëåäóåò èñïîëüçîâàòü ìåòîä Runîáúåêòà WshShell. Äëÿ òîãî ÷òîáû îïðåäåëèòü, êàêîå èìåííî ïðèëîæåíèå íåîáõîäèìî àêòèâèçèðîâàòü, ñòðîêà titleñðàâíèâàåòñÿ ïî î÷åðåäè ñ íàçâàíèÿìè îêîí âñåõ çàïóùåííûõ ïðèëîæåíèé. Åñëè íå íàéäåíî íè îäíîãî òî÷íîãî ñîâïàäåíèÿ, áóäåò ïðîèçâîäèòüñÿ ïîèñê òîãî ïðèëîæåíèÿ, íàçâàíèå îêíà êîòîðîãî íà÷èíàåòñÿ ñî ñòðîêè title. Åñëè è â ýòîì ñëó÷àå íå áóäåò íàéäåíî íè îäíîãî ïîäõîäÿùåãî ïðèëîæåíèÿ, òî áóäåò âåñòèñü ïîèñê ïðèëîæåíèÿ, çàãîëîâîê êîòîðîãî çàêàí÷èâàåòñÿ íà ýòó ñòðîêó. Åñëè áóäåò íàéäåíî íåñêîëüêî ïîäõîäÿùèõ îêîí, òî ïðîèçîéäåò àêòèâèçàöèÿ îäíîãî èç íèõ (îêíî âûáèðàåòñÿ ïðîèçâîëüíî).  êà÷åñòâå ïðèìåðà èñïîëüçîâàíèÿ ìåòîäà AppActivateâ ëèñòèíãå 1.13 ïðèâåäåí ñöåíàðèé RunCalc.js, êîòîðûé çàïóñêàåò ñòàíäàðòíûé êàëüêóëÿòîð Windows è âûïîëíÿåò â íåì íåñêîëüêî ïðîñòûõ àðèôìåòè÷åñêèõ äåéñòâèé (äëÿ ýòîãî èñïîëüçóåòñÿ ìåòîä SendKeys). Ëèñòèíã 1.13. Ñöåíàðèé RunCalc.js /*****************************************************************/ /* Èìÿ: RunCalc.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Àêòèâèçàöèÿ ïðèëîæåíèÿ ñ ïîìîùüþ èìåíè îêíà */ /*****************************************************************/ //Ñîçäàåì îáúåêò WshShell var WshShell = WScript.CreateObject("WScript.Shell"); //Çàïóñêàåì Êàëüêóëÿòîð WshShell.Run("calc"); //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåêóíäû WScript.Sleep(100); //Àêòèâèçèðóåì Êàëüêóëÿòîð WshShell.AppActivate("Calculator"); //Ïðèîñòàíîâêà ñöåíàðèÿ íà 0,1 ñåêóíäû WScript.Sleep(100); //Ïîñûëàåì íàæàòèÿ êëàâèø â Êàëüêóëÿòîð WshShell.SendKeys("1{+}"); WScript.Sleep(500); WshShell.SendKeys("2"); WScript.Sleep(500); WshShell.SendKeys("~"); WScript.Sleep(2500); /************* Êîíåö *********************************************/  ãëàâå 2 ïðèâåäåíû äðóãèå ïðèìåðû èñïîëüçîâàíèÿ ìåòîäà AppActivate(ñì. ëèñòèíãè 2.31 è 2.32). Ìåòîä CreateShortcut Ýòîò ìåòîä ïîçâîëÿåò ñîçäàòü íîâûé èëè îòêðûòü óæå ñóùåñòâóþùèé ÿðëûê äëÿ èçìåíåíèÿ åãî ñâîéñòâ.  ëèñòèíãå 1.14 ïðèâåäåí ïðèìåð ñöåíàðèÿ, â êîòîðîì ñîçäàþòñÿ äâà ÿðëûêà — íà ñàì âûïîëíÿåìûé ñöåíàðèé (îáúåêò oShellLinkè íà ñåòåâîé ðåñóðñ ( oUrlLink). Ëèñòèíã 1.14. Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà CreateShortcut /*****************************************************************/ /* Èìÿ: MakeShortcuts.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêîâ èç ñöåíàðèÿ */ /*****************************************************************/ var WshShell,oShellLink,oUrlLink; //Ñîçäàåì îáúåêò WshShell WshShell=WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê íà ôàéë oShellLink=WshShell.CreateShortcut("Current Script.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oShellLink.TargetPath=WScript.ScriptFullName; //Ñîõðàíÿåì ÿðëûê oShellLink.Save(); //Ñîçäàåì ÿðëûê íà ñåòåâîé ðåñóðñ oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL"); //Óñòàíàâëèâàåì URL oUrlLink.TargetPath = "http://www.microsoft.com"; //Ñîõðàíÿåì ÿðëûê oUrlLink.Save(); /************* Êîíåö *********************************************/ Ïðèìåðû ðàáîòû ñ ÿðëûêàìè ïðèâåäåíû â ëèñòèíãàõ 1.19–1.24, 2.43 è 2.44. Ìåòîä Environment Ïàðàìåòð WshEnvironment; âîçìîæíûìè çíà÷åíèÿìè ýòîãî ïàðàìåòðà ÿâëÿþòñÿ "System" (ïåðåìåííûå ñðåäû îïåðàöèîííîé ñèñòåìû), "User" (ïåðåìåííûå ñðåäû ïîëüçîâàòåëÿ), "Volatile" (âðåìåííûå ïåðåìåííûå) èëè "Process" (ïåðåìåííûå ñðåäû òåêóùåãî êîìàíäíîãî îêíà). Çàìå÷àíèå  ñëåäóþùåì ïðèìåðå ìû ðàñïå÷àòûâàåì ÷èñëî ïðîöåññîðîâ, èìåþùèõñÿ â êîìïüþòåðå ñ îïåðàöèîííîé ñèñòåìîé Windows NT/2000/XP (ïåðåìåííàÿ NUMBER_OF_PROCESSORS), è ïóòü ê êàòàëîãó Windows (ëèñòèíã 1.15). Ëèñòèíã 1.15. Ïå÷àòü çíà÷åíèé ïåðåìåííûõ ñðåäû (îáúåêò WshShell.Environment) /*****************************************************************/ /* Èìÿ: ShowEnvir.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ïîëó÷åíèå çíà÷åíèé íåêîòîðûõ ïåðåìåííûõ ñðåäû */ /*****************************************************************/ var WshShell,WshSysEnv; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàíèå êîëëåêöèè WshEnvironment WshSysEnv = WshShell.Environment("SYSTEM"); WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS")); WScript.Echo(WshShell.Environment.Item("WINDIR")); /************* Êîíåö *********************************************/ Ìåòîä ExpandEnvironmentString  ñëåäóþùåì ïðèìåðå íà ýêðàí âûâîäèòñÿ ïóòü ê êàòàëîãó Windows (ëèñòèíã 1.16). Ëèñòèíã 1.16. Ïå÷àòü çíà÷åíèé ïåðåìåííûõ ñðåäû (ExpandEnvironmertStrings) /*****************************************************************/ /* Èìÿ: ExpEnvStr.js */ /* ßçûê: JScript */ /* Êîäèðîâêà: Windows */ /* Îïèñàíèå: Ïîëó÷åíèå çíà÷åíèé ïåðåìåííûé ñðåäû ñ ïîìîùüþ */ /* ìåòîäà ExpandEnvironmentString */ /*****************************************************************/ var WS = WScript.CreateObject("WScript.Shell"); WScript.Echo("Êàòàëîã Windows:"+WS.ExpandEnvironmentStrings("%WinDir%")); /************* Êîíåö *********************************************/ Ìåòîä LogEvent  Windows NT/2000/XP ñîáûòèÿ çàïèñûâàþòñÿ â ñèñòåìíîì æóðíàëå, à â Windows 9õ — â ôàéëå WSH.log, ðàñïîëîæåííîì â êàòàëîãå ïîëüçîâàòåëåé Windows. Çàïèñü â WSH.log áóäåò ñîäåðæàòü âðåìÿ ñîáûòèÿ, åãî òèï è òåêñò. Òèïû ñîîáùåíèé îïèñàíû â òàáë. 1.9. Òàáëèöà 1.9. Òèïû ñîîáùåíèé (ïàðàìåòð
 ñëåäóþùåì ïðèìåðå ïðîèçâîäèòñÿ ïðîòîêîëèðîâàíèå ðàáîòû ñöåíàðèÿ ðåãèñòðàöèè (çäåñü ïðåäïîëàãàåòñÿ, ÷òî åñëè ýòîò ñöåíàðèé îòðàáîòàë óñïåøíî, òî ôóíêöèÿ RunLoginScriptâîçâðàùàåò true, â ïðîòèâíîì ñëó÷àå — false): var WshShell = WScript.CreateObject("WScript.Shell"); rc = RunLoginScript(); if (rc) WshShell.LogEvent(0,"Logon Script Completed Successfully"); else WshShell.LogEvent(1,"Logon Script failed"); Ìåòîä Popup Åñëè â ìåòîäå íå çàäàí ïàðàìåòð Ïàðàìåòð nTypeìîæåò ïðèíèìàòü òå æå çíà÷åíèÿ, ÷òî è â ôóíêöèè MessageBoxèç Microsoft Win32 API.  òàáë. 1.10 îïèñàíû íåêîòîðûå âîçìîæíûå çíà÷åíèÿ ïàðàìåòðà nType è èõ ñìûñë (ïîëíûé ñïèñîê çíà÷åíèé ýòîãî ïàðàìåòðà ìîæíî ïîñìîòðåòü â îïèñàíèè ôóíêöèè MessageBox â äîêóìåíòàöèè ïî ôóíêöèÿì Windows API). Òàáëèöà 1.10. Òèïû êíîïîê è èêîíîê äëÿ ìåòîäà
Çàìå÷àíèå  ñöåíàðèÿõ, íàïèñàííûõ íà ÿçûêå VBScript, ìîæíî íåïîñðåäñòâåííî èñïîëüçîâàòü èìåíîâàííûå êîíñòàíòû òèïà vbOkCanceláåç ïðåäâàðèòåëüíîãî èõ îáúÿâëåíèÿ. Äëÿ òîãî ÷òîáû èñïîëüçîâàòü òàêèå êîíñòàíòû â JScript-ñöåíàðèÿõ, èõ íóæíî ïðåäâàðèòåëüíî îáúÿâèòü êàê ïåðåìåííûå è ïðèñâîèòü íóæíûå çíà÷åíèÿ (íàïðèìåð, var vbOkCancel=1;). Åñòåñòâåííî, â ëþáûõ ñöåíàðèÿõ âìåñòî èìåí êîíñòàíò ìîæíî èñïîëüçîâàòü èõ ÷èñëîâûå çíà÷åíèÿ.  ìåòîäå Popupìîæíî êîìáèíèðîâàòü çíà÷åíèÿ ïàðàìåòðà, ïðèâåäåííûå â òàáë. 1.10. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ ñëåäóþùåãî ñöåíàðèÿ: var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Popup("Êîïèðîâàíèå çàâåðøåíî óñïåøíî", 5, "Óðà",65); íà ýêðàí áóäåò âûâåäåíî èíôîðìàöèîííîå îêíî, ïîêàçàííîå íà ðèñ. 1.11, êîòîðîå àâòîìàòè÷åñêè çàêðîåòñÿ ÷åðåç 5 ñåêóíä. Ðèñ. 1.11. Èíôîðìàöèîííîå îêíî, ñîçäàííîå ìåòîäîì Popup Ìåòîä Popup âîçâðàùàåò öåëîå çíà÷åíèå, ñ ïîìîùüþ êîòîðîãî ìîæíî óçíàòü, êàêàÿ èìåííî êíîïêà áûëà íàæàòà äëÿ âûõîäà (òàáë. 1.11). Òàáëèöà 1.11. Âîçâðàùàåìûå ìåòîäîì
Ïðèìåðû âûâîäà èíôîðìàöèè ñ ïîìîùüþ ìåòîäà Popupïðåäñòàâëåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.13 è 2.14). Ìåòîä RegDelete Åñëè ïàðàìåòð \\, òî ýòîò ìåòîä óäàëÿåò êëþ÷ öåëèêîì (âìåñòå ñî âñåìè ïàðàìåòðàìè âíóòðè åãî), â ïðîòèâíîì ñëó÷àå óäàëÿåòñÿ òîëüêî îäèí çàäàííûé ïàðàìåòð. Ïàðàìåòð strNameäîëæåí íà÷èíàòüñÿ ñ îäíîãî èç ñëåäóþùèõ êîðíåâûõ êëþ÷åé (òàáë. 1.12). Òàáëèöà 1.12. Íàçâàíèÿ êëþ÷åé
Ïðèìåð, èëëþñòðèðóþùèé ïðèìåíåíèå ìåòîäà RegDelete, ïðèâåäåí â ãëàâå 2 (ñì. ëèñòèíãè 2.45 è 2.46). Ìåòîä RegRead Ñ ïîìîùüþ ýòîãî ìåòîäà ìîæíî ïðî÷èòàòü ñëåäóþùèå òèïû äàííûõ: REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_BINARYè REG_MULTI_SZ. Åñëè â ðååñòðå ñîäåðæàòñÿ äàííûå äðóãèõ òèïîâ, òî ìåòîä RegReadâåðíåò çíà÷åíèå DISP_E_TYPEMISMATCH. Åñëè ïàðàìåòð \\, òî ýòîò ìåòîä ñ÷èòûâàåò çíà÷åíèå ïî óìîë÷àíèþ äëÿ ðàçäåëà (åñëè îíî óñòàíîâëåíî), â ïðîòèâíîì ñëó÷àå ÷èòàåòñÿ çíà÷åíèå ïàðàìåòðà.  ñëåäóþùåì ïðèìåðå íà ýêðàí âûâîäÿòñÿ ñ÷èòàííûå èç ðååñòðà ñ ïîìîùüþ ìåòîäà RegReadçíà÷åíèå ïàðàìåòðà è çíà÷åíèå ïî óìîë÷àíèþ äëÿ ðàçäåëà ðååñòðà (ëèñòèíã 1.17). Ëèñòèíã 1.17. ×òåíèå çíà÷åíèé ïàðàìåòðà è ðàçäåëà ñèñòåìíîãî ðååñòðà /********************************************************************/ /* Èìÿ: RegRead.js */ /* ßçûê: JScript */ /* Îïèñàíèå: ×òåíèå çíà÷åíèé ïàðàìåòðà è ðàçäåëà ñèñòåìíîãî ðååñòðà */ /********************************************************************/ var WS,s; //Ñîçäàåì îáúåêò WshShell WS = WScript.CreateObject("WScript.Shell"); s="Çíà÷åíèå ïàðàìåòðà\n"; s+="HKCU\\Control Panel\\Keyboard\\KeyboardSpeed = "; //×èòàåì çíà÷åíèå ïàðàìåòðà ðååñòðà s+=WS.RegRead("HKCU\\Control Panel\\Keyboard\\KeyboardSpeed")+"\n\n"; s+="Çíà÷åíèå ïî óìîë÷àíèþ äëÿ ðàçäåëà\n"; s+="HKCU\\Control Panel\\Keyboard\\ = "; //×èòàåì çíà÷åíèå ïî óìîë÷àíèþ äëÿ ðàçäåëà ðååñòðà s+=WS.RegRead("HKCU\\Control Panel\\Keyboard\\"); //Âûâîä íà ýêðàí ñôîðìèðîâàííîé ñòðîêè WScript.Echo(s); /************* Êîíåö ***********************************************/ Ìåòîä RegWrite Åñëè ïàðàìåòð \\, òî ýòîò ìåòîä çàïèñûâàåò ðàçäåë; åñëè òàêîãî ðàçäåëà íåò, îí áóäåò ñîçäàí. Åñëè â êîíöå strNameîòñóòñòâóþò ñèìâîëû \\, òî ïðîèçâîäèòñÿ çàïèñü óêàçàííîãî ïàðàìåòðà â íóæíûé ðàçäåë; åñëè òàêîãî ïàðàìåòðà íåò, îí áóäåò ñîçäàí ñ óêàçàííûì èìåíåì è çíà÷åíèåì. Ïàðàìåòð REG_SZ", " REG_EXPAND_SZ", " REG_DWORD" è " REG_BINARY". Åñëè â êà÷åñòâå ïàðàìåòðà strTypeïåðåäàåòñÿ äðóãîå çíà÷åíèå, òî ìåòîä RegWriteâåðíåò çíà÷åíèå E_INVALIDARG.  ñëó÷àå, êîãäà REG_SZ" èëè " REG_EXPAND_SZ", ìåòîä RegWriteàâòîìàòè÷åñêè êîíâåðòèðóåò ïàðàìåòð anyValueâ ñòðîêó. Åñëè çíà÷åíèå strTypeðàâíî " REG_DWORD", òî anyValueïåðåâîäèòñÿ â öåëûé ôîðìàò. Åñëè strType ðàâíî " REG_BINARY", òî anyValueäîëæíî áûòü öåëûì ÷èñëîì. Ïðèìåð, èëëþñòðèðóþùèé ïðèìåíåíèå ìåòîäà RegWrite, ïðèâåäåí â ãëàâå 2 (ñì. ëèñòèíãè 2.45 è 2.46). Ìåòîä Run Ïàðàìåòð Òàáëèöà 1.13. Òèïû îêíà (
Çàìå÷àíèå Íåîáÿçàòåëüíûé ïàðàìåòð false, òî ïîñëå çàïóñêà èç ñöåíàðèÿ íîâîãî ïðîöåññà óïðàâëåíèå ñðàçó æå âîçâðàùàåòñÿ îáðàòíî â ñöåíàðèé (íå äîæèäàÿñü çàâåðøåíèÿ çàïóùåííîãî ïðîöåññà). Åñëè æå bWaitOnReturnóñòàíîâëåí â true, òî ñöåíàðèé âîçîáíîâèò ðàáîòó òîëüêî ïîñëå çàâåðøåíèÿ âûçâàííîãî ïðîöåññà. Ïðè ýòîì åñëè ïàðàìåòð true, òî ìåòîä Runâîçâðàùàåò êîä âûõîäà âûçâàííîãî ïðèëîæåíèÿ. Åñëè æå bWaitOnReturnðàâåí falseèëè íå çàäàí, òî ìåòîä Runâñåãäà âîçâðàùàåò íîëü.  ñëåäóþùåì ïðèìåðå ìû çàïóñêàåì Áëîêíîò (notepad.exe) è îòêðûâàåì â íåì ôàéë ñ âûïîëíÿåìûì ñöåíàðèåì: var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("%windir%\\notepad" + WScript.ScriptFullName); Ñëåäóþùèé ñöåíàðèé ïå÷àòàåò êîä âûõîäà âûçâàííîãî ïðèëîæåíèÿ (ëèñòèíã 1.18). Ëèñòèíã 1.18. Âûâîä êîäà âûõîäà çàïóùåííîãî ïðèëîæåíèÿ/********************************************************************/ /* Èìÿ: RetCode.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Âûâîä êîäà âûõîäà çàïóùåííîãî ïðèëîæåíèÿ */ /********************************************************************/ //Ñîçäàåì îáúåêò WshShell var WshShell = WScript.CreateObject("WScript.Shell"); //Çàïóñêàåì Áëîêíîò è îæèäàåì çàâåðøåíèÿ åãî ðàáîòû Return = WshShell.Run("notepad " + WScript.ScriptFullName, 1, true); //Ïå÷àòàåì êîä âîçâðàòà WScript.Echo("Êîä âîçâðàòà:", Return); /************* Êîíåö ***********************************************/ Äðóãèå ïðèìåðû çàïóñêà ïðèëîæåíèé ñ ïîìîùüþ ìåòîäà Run ïðèâåäåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.31 è 2.32). Ìåòîä SendKeys Êàæäàÿ êëàâèøà çàäàåòñÿ îäíèì èëè íåñêîëüêèìè ñèìâîëàìè. Íàïðèìåð, äëÿ òîãî ÷òîáû çàäàòü íàæàòèå äðóã çà äðóãîì áóêâ À, Á è Â, íóæíî óêàçàòü â êà÷åñòâå ïàðàìåòðà äëÿ SendKeysñòðîêó " ÀÁÂ": string="AÁB". Íåñêîëüêî ñèìâîëîâ èìåþò â ìåòîäå SendKeys ñïåöèàëüíîå çíà÷åíèå: +, ^, %, ~, (, ). Äëÿ òîãî ÷òîáû çàäàòü îäèí èç ýòèõ ñèìâîëîâ, èõ íóæíî çàêëþ÷èòü â ôèãóðíûå ñêîáêè {}. Íàïðèìåð, äëÿ çàäàíèÿ çíàêà ïëþñ èñïîëüçóåòñÿ {+}. Êâàäðàòíûå ñêîáêè []õîòÿ è íå èìåþò â ìåòîäå SendKeys ñïåöèàëüíîãî ñìûñëà, èõ òàêæå íóæíî çàêëþ÷àòü â ôèãóðíûå ñêîáêè. Êðîìå ýòîãî, äëÿ çàäàíèÿ ñàìèõ ôèãóðíûõ ñêîáîê ñëåäóåò èñïîëüçîâàòü ñëåäóþùèå êîíñòðóêöèè: {{}(ëåâàÿ ñêîáêà) è {}}(ïðàâàÿ ñêîáêà). Äëÿ çàäàíèÿ íåîòîáðàæàåìûõ ñèìâîëîâ, òàêèõ êàê <Enter> èëè <Tab> è ñïåöèàëüíûõ êëàâèø, â ìåòîäå SendKeysèñïîëüçóþòñÿ êîäû, ïðåäñòàâëåííûå â òàáë. 1.14. Òàáëèöà 1.14. Êîäû ñïåöèàëüíûõ êëàâèø äëÿ
Äëÿ çàäàíèÿ êîìáèíàöèé êëàâèø ñ <Shift>, <Ctrl> èëè <Alt>, ïåðåä ñîîòâåòñòâóþùåé êëàâèøåé íóæíî ïîñòàâèòü îäèí èëè íåñêîëüêî êîäîâ èç òàáë. 1.15. Òàáëèöà 1.15. Êîäû êëàâèø <Shift>, <Ctrl> è <Alt>
Äëÿ òîãî ÷òîáû çàäàòü êîìáèíàöèþ êëàâèø, êîòîðóþ íóæíî íàáèðàòü, óäåðæèâàÿ íàæàòûìè êëàâèøè <Shift>, <Ñtrl> èëè <Alt>, íóæíî çàêëþ÷èòü êîäû ýòèõ êëàâèø â ñêîáêè. Íàïðèìåð, åñëè òðåáóåòñÿ ñûìèòèðîâàòü íàæàòèå êëàâèø <G> è <S> ïðè íàæàòîé êëàâèøå <Shift>, ñëåäóåò èñïîëüçîâàòü ïîñëåäîâàòåëüíîñòü " +(GS)". Äëÿ òîãî æå, ÷òîáû çàäàòü îäíîâðåìåííîå íàæàòèå êëàâèø <Shift>+<G>, à çàòåì <S> (óæå áåç <Shift>), èñïîëüçóåòñÿ " +GS".  ìåòîäå SendKeys ìîæíî çàäàòü íåñêîëüêî íàæàòèé ïîäðÿä îäíîé è òîé æå êëàâèøè. Äëÿ ýòîãî íåîáõîäèìî â ôèãóðíûõ ñêîáêàõ óêàçàòü êîä íóæíîé êëàâèøè, à ÷åðåç ïðîáåë — ÷èñëî íàæàòèé. Íàïðèìåð, {LEFT 42}îçíà÷àåò íàæàòèå êëàâèøè <<> 42 ðàçà ïîäðÿä; {h 10}îçíà÷àåò íàæàòèå êëàâèøè <h> 10 ðàç ïîäðÿä. Çàìå÷àíèå Ïðèìåðû, èëëþñòðèðóþùèå èñïîëüçîâàíèå SendKeys, ïðèâåäåíû â ëèñòèíãàõ 1.13, 2.31, 2.32. Ðàáîòà ñ ÿðëûêàìè Ñâîéñòâà è ìåòîäû äëÿ ðàáîòû ñ ÿðëûêàìè Windows ïðåäîñòàâëÿþò äâà îáúåêòà WSH: WshShortcutè WshUrlShortcut. Îáúåêò WshShortcut Ñ ïîìîùüþ îáúåêòà WshShortcutìîæíî ñîçäàòü íîâûé ÿðëûê Windows èëè èçìåíèòü ñâîéñòâà óæå ñóùåñòâóþùåãî ÿðëûêà. Ýòîò îáúåêò ìîæíî ñîçäàòü òîëüêî ñ ïîìîùüþ ìåòîäà CreateShortcutîáúåêòà WshShell.  ëèñòèíãå 1.19 ïðåäñòàâëåí ïðèìåð ñöåíàðèÿ, â êîòîðîì ñîçäàåòñÿ ÿðëûê íà ýòîò ñàìûé ñöåíàðèé (ÿðëûê áóäåò íàõîäèòüñÿ â òåêóùåì êàòàëîãå). Ëèñòèíã 1.19. Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé /*****************************************************************/ /* Èìÿ: MakeShortcut1.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé */ /*****************************************************************/ var WshShell,oShellLink; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oShellLink = WshShell.CreateShortcut("Current Script.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oShellLink.TargetPath = WScript.ScriptFullName; //Ñîõðàíÿåì ÿðëûê oShellLink.Save(); /************* Êîíåö *********************************************/ Ñâîéñòâà îáúåêòà WshShortcutîïèñàíû â òàáë. 1.16. Òàáëèöà 1.16. Ñâîéñòâà îáúåêòà
Ïðèâåäåì íåîáõîäèìûå ïîÿñíåíèÿ è ïðèìåðû èñïîëüçîâàíèÿ ñâîéñòâ îáúåêòà WshShortcut. Ñâîéñòâî Arguments  ëèñòèíãå 1.20 ïðèâåäåí ïðèìåð ñöåíàðèÿ, ñîçäàþùåãî ÿðëûê íà ýòîò ñàìûé ñöåíàðèé ñ äâóìÿ ïàðàìåòðàìè êîìàíäíîé ñòðîêè. Ëèñòèíã 1.20. Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé ñ àðãóìåíòàìè êîìàíäíîé ñòðîêè/*****************************************************************/ /* Èìÿ: MakeShortcut2.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé ñ */ /* àðãóìåíòàìè êîìàíäíîé ñòðîêè */ /*****************************************************************/ var WshShell,oShellLink; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oShellLink = WshShell.CreateShortcut("Current Script.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oShellLink.TargetPath = WScript.ScriptFullName; //Óêàçûâàåì àðãóìåíòû êîìàíäíîé ñòðîêè oShellLink.Arguments = "-a abc.txt"; //Ñîõðàíÿåì ÿðëûê oShellLink.Save(); /************* Êîíåö *********************************************/ Ñâîéñòâî HotKey Äëÿ òîãî ÷òîáû íàçíà÷èòü ÿðëûêó "ãîðÿ÷óþ" êëàâèøó, íåîáõîäèìî â ñâîéñòâî HotKeyçàïèñàòü ñòðîêó, ñîäåðæàùóþ íàçâàíèÿ íóæíûõ êëàâèø, ðàçäåëåííûå ñèìâîëîì " +". Çàìå÷àíèå  ñëåäóþùåì ïðèìåðå (ëèñòèíã 1.21) íà ðàáî÷åì ñòîëå ñîçäàåòñÿ ÿðëûê äëÿ Áëîêíîòà, êîòîðîìó íàçíà÷àåòñÿ êîìáèíàöèÿ "ãîðÿ÷èõ" êëàâèø <Ctrl>+ +<Alt>+<D>. Ëèñòèíã 1.21. Ñîçäàíèå ÿðëûêà íà Áëîêíîò ñ êîìáèíàöèåé "ãîðÿ÷èõ" êëàâèø/*****************************************************************/ /* Èìÿ: MakeShortcut3.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà Áëîêíîò ñ êîìáèíàöèåé ãîðÿ÷èõ */ /* êëàâèø */ /*****************************************************************/ var WshShell,strDesktop,oMyShortcut; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Îïðåäåëÿåì ïóòü ê ðàáî÷åìó ñòîëó strDesktop = WshShell.SpecialFolders("Desktop"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oMyShortcut = WshShell.CreateShortcut(strDesktop+"\\a_key.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oMyShortcut.TargetPath = WshShell.ExpandEnvironmentStrings("%windir%\\notepad.exe"); //Íàçíà÷àåì êîìáèíàöèþ ãîðÿ÷èõ êëàâèø oMyShortcut.Hotkey = "CTRL+ALT+D"; //Ñîõðàíÿåì ÿðëûê oMyShortcut.Save(); WScript.Echo("Ãîðÿ÷èå êëàâèøè äëÿ ÿðëûêà: "+oMyShortcut.Hotkey); /************* Êîíåö *********************************************/ Ñâîéñòâî IconLocation Äëÿ òîãî ÷òîáû çàäàòü çíà÷îê äëÿ ÿðëûêà, íåîáõîäèìî â ñâîéñòâî IconLocationçàïèñàòü ñòðîêó ñëåäóþùåãî ôîðìàòà: "ïóòü, èíäåêñ". Çäåñü ïàðàìåòð ïóòü îïðåäåëÿåò ðàñïîëîæåíèå ôàéëà, ñîäåðæàùåãî íóæíûé çíà÷îê, à ïàðàìåòð èíäåêñ — íîìåð ýòîãî çíà÷êà â ôàéëå (íîìåðà íà÷èíàþòñÿ ñ íóëÿ).  ñëåäóþùåì ïðèìåðå (ëèñòèíã 1.22) ñîçäàåòñÿ ÿðëûê íà âûïîëíÿþùèéñÿ ñöåíàðèé ñ ïåðâûì çíà÷êîì (èíäåêñ 0) èç ôàéëà notepad.exe. Ëèñòèíã 1.22. Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé ñî çíà÷êîì èç notepad.exe/*****************************************************************/ /* Èìÿ: MakeShortcut4.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà âûïîëíÿåìûé ñöåíàðèé ñ èêîíêîé */ /* èç notepad.exe */ /*****************************************************************/ var WshShell,oShellLink; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oShellLink = WshShell.CreateShortcut("Current Script.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oShellLink.TargetPath = WScript.ScriptFullName; //Âûáèðàåì èêîíêó èç ôàéëà notepad.exe oShellLink.IconLocation = "notepad.exe, 0"; //Ñîõðàíÿåì ÿðëûê oShellLink.Save(); /************* Êîíåö *********************************************/ Ñâîéñòâî WindowStyle Çíà÷åíèåì ñâîéñòâà WindowStyleÿâëÿåòñÿ öåëîå ÷èñëî intWindowStyle, êîòîðîå ìîæåò ïðèíèìàòü çíà÷åíèÿ, ïðèâåäåííûå â òàáë. 1.17. Òàáëèöà 1.17. Çíà÷åíèÿ ïàðàìåòðà
Ñâîéñòâî WorkingDirectory  ñëåäóþùåì ïðèìåðå (ëèñòèíã 1.23) ñîçäàåòñÿ ÿðëûê äëÿ Áëîêíîòà, ïðè÷åì â êà÷åñòâå ðàáî÷åãî êàòàëîãà óêàçàí êîðíåâîé êàòàëîã äèñêà Ñ:. Ëèñòèíã 1.23. Ñîçäàíèå ÿðëûêà íà Áëîêíîò ñ êîìáèíàöèåé ãîðÿ÷èõ êëàâèø/*****************************************************************/ /* Èìÿ: MakeShortcut5.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà Áëîêíîò ñ èçìåíåíèåì ðàáî÷åãî */ /* êàòàëîãà */ /*****************************************************************/ var WshShell,oShellLink; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oShellLink = WshShell.CreateShortcut("Notepad.lnk"); //Óñòàíàâëèâàåì ïóòü ê ôàéëó oShellLink.TargetPath = "notepad.exe"; //Íàçíà÷àåì ðàáî÷èé êàòàëîã oShellLink.WorkingDirectory = "c:\\"; //Ñîõðàíÿåì ÿðëûê oShellLink.Save(); /************* Êîíåö *********************************************/ Îáúåêò WshShortcutèìååò åäèíñòâåííûé ìåòîä Save, êîòîðûé ñîõðàíÿåò çàäàííûé ÿðëûê â êàòàëîãå, óêàçàííîì â ñâîéñòâå FullName. Îáúåêò WshUrlShortcut Ñ ïîìîùüþ îáúåêòà WshUrlShortcutìîæíî ñîçäàòü íîâûé ÿðëûê äëÿ ñåòåâûõ ðåñóðñîâ èëè èçìåíèòü ñâîéñòâà óæå ñóùåñòâóþùåãî ÿðëûêà. Ýòîò îáúåêò, êàê è WshShortcut, ìîæíî ñîçäàòü òîëüêî ñ ïîìîùüþ ìåòîäà CreateShortcutîáúåêòà WshShell.  ñëåäóþùåì ïðèìåðå (ëèñòèíã 1.24) ñîçäàåòñÿ ñåòåâîé ÿðëûê äëÿ ñàéòà www.microsoft.com. Ëèñòèíã 1.24. Ñîçäàíèå ñåòåâîãî ÿðëûêà/*****************************************************************/ /* Èìÿ: MakeShortcut6.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Ñîçäàíèå ñåòåâîãî ÿðëûêà äëÿ www.microsoft.com */ /*****************************************************************/ var WshShell,oUrlLink; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Ñîçäàåì ÿðëûê â òåêóùåì êàòàëîãå oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL"); //Óñòàíàâëèâàåì ïóòü ê ñàéòó oUrlLink.TargetPath = "http://www.microsoft.com"; //Ñîõðàíÿåì ÿðëûê oUrlLink.Save(); /************* Êîíåö *********************************************/ Îáúåêò WshUrlShortcutèìååò äâà ñâîéñòâà: FullNameè TargetPath, êîòîðûå ïîëíîñòüþ àíàëîãè÷íû îäíîèìåííûì ñâîéñòâàì ðàññìîòðåííîãî âûøå îáúåêòà WshShortcut. Òàêæå ó îáúåêòà WshUrlShortcutèìååòñÿ ìåòîä Save, ñ ïîìîùüþ êîòîðîãî ÿðëûê ñîõðàíÿåòñÿ â êàòàëîãå, óêàçàííîì â ñâîéñòâå FullName. Äðóãèå ïðèìåðû ðàáîòû ñ ÿðëûêàìè ñ ïîìîùüþ îáúåêòà WshShortcutïðèâåäåíû â ãëàâå 2 (ñì. ëèñòèíãè 2.43 è 2.44). Çàïóñê ïðîöåññîâ íà ëîêàëüíîé è óäàëåííîé ìàøèíå Èç ñöåíàðèåâ WSH 5.6 ìîæíî íà ëîêàëüíîé ìàøèíå çàïóñêàòü äî÷åðíèå ïðîöåññû, èìåÿ ïðè ýòîì äîñòóï ê èõ ñòàíäàðòíûì âõîäíûì/âûõîäíûì ïîòîêàì è êîíòðîëèðóÿ õîä âûïîëíåíèÿ ýòèõ ïðîöåññîâ. Äëÿ ýòèõ öåëåé ïðåäíàçíà÷åí îáúåêò WshScriptExec. Êðîìå ýòîãî, èìååòñÿ âîçìîæíîñòü çàïóñòèòü ñöåíàðèé, ôàéë ñ êîòîðûì íàõîäèòñÿ íà ëîêàëüíîé ìàøèíå, íà äðóãîé óäàëåííîé ìàøèíå. Äëÿ âûïîëíåíèÿ ñöåíàðèåâ íà óäàëåííûõ ìàøèíàõ è îáðàáîòêè îøèáîê, âîçíèêàþùèõ â òàêèõ ñöåíàðèÿõ, èñïîëüçóþòñÿ îáúåêòû WshController, WshRemoteè WshRemoteError. Îáúåêò WshScriptExec  WSH 5.6 ïîÿâèëàñü âîçìîæíîñòü ïðè ïîìîùè ìåòîäà WshShell.Execçàïóñêàòü êîíñîëüíîå ïðèëîæåíèå èëè ñöåíàðèé êàê äî÷åðíèé ïðîöåññ âûïîëíÿåìîãî ñöåíàðèÿ, ò.å. ñ òåìè æå ïåðåìåííûìè ñðåäû, ÷òî è ó ïðîöåññà-ðîäèòåëÿ. Ìåòîä WshShell.Execâûïîëíÿåò êîìàíäíóþ ñòðîêó, óêàçàííóþ â êà÷åñòâå åãî ïàðàìåòðà, è âîçâðàùàåò îáúåêò WScriptExec, ñâîéñòâà è ìåòîäû êîòîðîãî ïðåäîñòàâëÿþò èíôîðìàöèþ î çàïóùåííîé çàäà÷å è îáåñïå÷èâàþò äîñòóï ê åå ñòàíäàðòíûì ïîòîêàì ââîäà/âûâîäà è îøèáîê (îáðàáîòêà ýòèõ ïîòîêîâ íåîáõîäèìà â ñèëó òîãî, ÷òî íåïîñðåäñòâåííî íà ýêðàíå ñòðîêè, âûâîäèìûå äî÷åðíèì ïðèëîæåíèåì, íå ïîÿâëÿþòñÿ). Îòìåòèì òàêæå, ÷òî ñ ïîìîùüþ ìåòîäà WshShell.Execìîæíî çàïóñêàòü è ãðàôè÷åñêèå îêîííûå Windows-ïðèëîæåíèÿ.  ýòîì ñëó÷àå ñîçäàâàåìûé îáúåêò WshScriptExecïîëåçåí òåì, ÷òî îí ïîçâîëÿåò ïîëó÷èòü èäåíòèôèêàòîð çàïóùåííîãî ïðîöåññà (Process ID, PID), êîòîðûé çàòåì ìîæíî èñïîëüçîâàòü äëÿ àêòèâèçàöèè çàäà÷è ïðè ïîìîùè ìåòîäà WshShell.AppActivate. Îáúåêò WScriptExecèìååò åäèíñòâåííûé ìåòîä Terminate, ñ ïîìîùüþ êîòîðîãî ìîæíî ïðåðâàòü âûïîëíåíèå äî÷åðíåãî ïðîöåññà. Íàïðèìåð: var WshShell=WScript.CreateObject("WScript.Shell"); var ChildJob = WshShell.Exec("cscript ChildScript.js"); ChildJob.Terminate(); Ìåòîä Terminateïûòàåòñÿ çàêðûòü ïðèëîæåíèå, ïîñûëàÿ åìó ñîîáùåíèå WM_CLOSE. Åñëè ýòî íå ñðàáàòûâàåò, çàäà÷à çàâåðøàåòñÿ ïðèíóäèòåëüíî. Ìåòîäîì Terminateíóæíî ïîëüçîâàòüñÿ òîëüêî â êðàéíåì ñëó÷àå, ò.ê. íåêîòîðûå ïðèëîæåíèÿ, çàâåðøåííûå òàêèì ñïîñîáîì, íå ïîëíîñòüþ îñâîáîæäàþò ðåñóðñû. Ïîýòîìó, êàê ïðàâèëî, ëó÷øå äîæäàòüñÿ, êîãäà çàïóùåííàÿ çàäà÷à ñàìà çàêîí÷èò ñâîþ ðàáîòó. Ñâîéñòâà îáúåêòà WshScriptExecîïèñàíû â òàáë. 1.18. Òàáëèöà 1.18. Ñâîéñòâà îáúåêòà
Ñâîéñòâî ProcessID  ñëåäóþùåì ïðèìåðå (ñöåíàðèé MakeCalc.js) ñâîéñòâî ProcessIDèñïîëüçóåòñÿ äëÿ àêòèâèçàöèè ñòàíäàðòíîãî êàëüêóëÿòîðà Windows. Íàïîìíèì, ÷òî äëÿ ýòîé öåëè òàêæå ìîæíî ïðè âûçîâå ìåòîäà WshShell.AppActivateèñïîëüçîâàòü íàçâàíèå îêíà "Calculator". Ëèñòèíã 1.25. Àêòèâèçàöèÿ ïðèëîæåíèé ñ ïîìîùüþ PID /*****************************************************************/ /* Èìÿ: MakeCalc.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Àêòèâèçàöèÿ ïðèëîæåíèé ñ ïîìîùüþ PID */ /*****************************************************************/ var WshShell, theCalculator; //Ñîçäàåì îáúåêò WshShell WshShell = WScript.CreateObject("WScript.Shell"); //Çàïóñêàåì êàëüêóëÿòîð theCalculator = WshShell.Exec("calc"); //Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ äëÿ òîãî, ÷òîáû îêíî //êàëüêóëÿòîðà ïîÿâèëîñü íà ýêðàíå WScript.Sleep(500); //Àêòèâèçèðóåì îêíî êàëüêóëÿòîðà WshShell.AppActivate(theCalculator.ProcessID); //Ïîñûëàåì íàæàòèÿ êëàâèø â îêíî êàëüêóëÿòîðà WshShell.SendKeys("1{+}"); WScript.Sleep(500); WshShell.SendKeys("2"); WScript.Sleep(500); WshShell.SendKeys("~"); /************* Êîíåö *********************************************/ Ñâîéñòâî Status Ïîñëå çàïóñêà äî÷åðíåãî ïðîöåññà ñöåíàðèé-ðîäèòåëü ïðîäîëæàåò âûïîëíÿòüñÿ àñèíõðîííî, ïîýòîìó íåîáõîäèìî óìåòü îïðåäåëÿòü, âûïîëíÿåòñÿ ëè åùå çàïóùåííàÿ çàäà÷à, èëè îíà óæå çàâåðøåíà. Äëÿ ýòîé öåëè èñïîëüçóåòñÿ ñâîéñòâî Status: åñëè çíà÷åíèå Statusðàâíî 0, òî ýòî îçíà÷àåò, ÷òî äî÷åðíèé ïðîöåññ íàõîäèòñÿ â ñòàäèè âûïîëíåíèÿ, åñëè Statusðàâíî 1, òî çàïóùåííàÿ çàäà÷à óæå çàâåðøåíà. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ ïðèâåäåííîãî â ëèñòèíãå 1.26 ñöåíàðèÿ ChildStatus.js íà ýêðàí âûâåäåòñÿ íåñêîëüêî ñòðîê "Êîìàíäà åùå âûïîëíÿåòñÿ" (ðèñ. 1.12). Ëèñòèíã 1.26. Êîíòðîëü ñîñòîÿíèÿ äî÷åðíåãî ïðîöåññà /*****************************************************************/ /* Èìÿ: ChildStatus.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Êîíòðîëü ñîñòîÿíèÿ äî÷åðíåãî ïðîöåññà */ /*****************************************************************/ var WshShell,theJob; //Ñîçäàåì îáúåêò WshShell WshShell=WScript.CreateObject("WScript.Shell"); //Çàïóñêàåì äî÷åðíåå ïðèëîæåíèå theJob = WshShell.Exec("xcopy /?"); for (;;) { if (theJob.status==1) //Ïðîâåðÿåì çàâåðøåíèå äî÷åðíåãî ïðîöåññà break; //Âûõîäèì èç öèêëà else WScript.Echo("Êîìàíäà åùå âûïîëíÿåòñÿ"); } WScript.Echo("Âûïîëíåíèå çàâåðøåíî"); /************* Êîíåö *********************************************/ Ðèñ. 1.12. Ðåçóëüòàò âûïîëíåíèÿ ñöåíàðèÿ ChildStatus.js Ñâîéñòâà StdOut, StdIn è StdErr Ðàáîòàòü c ïîòîêàìè StdOut, StdInè StdErrîáúåêòà WshScriptExecìîæíî ñ ïîìîùüþ òåõ æå ìåòîäîâ, êîòîðûå ïðèìåíÿþòñÿ â îáúåêòå WScriptäëÿ äîñòóïà ê ñîîòâåòñòâóþùèì ñòàíäàðòíûì ïîòîêàì (ñì. òàáë. 1.3). Íàïðèìåð, çàïóñòèâ ïðèâåäåííûé â ëèñòèíãå 1.27 ñöåíàðèé ConToWin.js ñ ïîìîùüþ wscript.exe, ìû âûâåäåì â ãðàôè÷åñêîå îêíî èíôîðìàöèþ î êëþ÷àõ ïðîãðàììû cscript.exe (ðèñ. 1.13). Ðèñ. 1.13. Ðåçóëüòàò âûïîëíåíèÿ ñöåíàðèÿ ConToWin.js Îòìåòèì, ÷òî çàïóñêàåìîå êîíñîëüíîå ïðèëîæåíèå cscript.exe âûâîäèò ñèìâîëû êèðèëëèöû â DOS-êîäèðîâêå, ïîýòîìó äëÿ âûâîäà òàêèõ ñèìâîëîâ â ãðàôè÷åñêîå îêíî èõ íóæíî ïðåîáðàçîâàòü â Windows-êîäèðîâêó.  ðàññìàòðèâàåìîì ñöåíàðèè ýòî äåëàåòñÿ ñ ïîìîùüþ ôóíêöèè DosToWin, êîòîðàÿ ïðåîáðàçóåò ïåðåäàííóþ â êà÷åñòâå ïàðàìåòðà ñòðîêó ñëåäóþùèì îáðàçîì: âñå ñèìâîëû êèðèëëèöû â ýòîé ñòðîêå ïåðåâîäÿòñÿ â Windows-êîäèðîâêó, îñòàëüíûå ñèìâîëû îñòàþòñÿ áåç èçìåíåíèé: function DosToWin(s) { var i,ss; //Îáúÿâëÿåì ïåðåìåííûå //Ïðîâåðÿåì, ñîçäàí ëè îáúåêò RusDict if (typeof(RusDict)=="undefined") //Åñëè îáúåêò RusDict íå ñîçäàí, ñîçäàåì åãî MakeRusDict(); ss=""; for (i=0;i<s.length;i++) { //Öèêë ïî âñåì ñèìâîëàì â ñòðîêå if (RusDict.Exists(s.charAt(i))) //Ïðîâåðÿåì íàëè÷èå ñèìâîëà â ñëîâàðå //Ïðåîáðàçóåì i-é ñèìâîë â Windows-êîäèðîâêó ss+=RusDict.Item(s.charAt(i)); else ss+=s.charAt(i); } return ss; } Îñíîâíûì â ôóíêöèè DosToWinÿâëÿåòñÿ èñïîëüçîâàíèå îáúåêòà Dictionaryñ èìåíåì RusDict. Ýòîò îáúåêò ôîðìèðóåòñÿ â ôóíêöèè MakeRusDictè ñîäåðæèò ïàðû "êëþ÷"–"çía÷eíèe" äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà, ïðè÷åì â êà÷åñòâå êëþ÷à óêàçûâàåòñÿ áóêâà â DOS-êîäèðîâêå, à â êà÷åñòâå çíà÷åíèÿ — ñèìâîë ñ êîäîì, êîòîðûé ñîîòâåòñòâóåò ýòîé áóêâå â Windows-êîäèðîâêå. //Ôóíêöèÿ äëÿ ñîçäàíèÿ îáúåêòà Dictionary ñ ïàðàìè "êëþ÷-çíà÷åíèå", ãäå //"êëþ÷"-áóêâà â DOS-êîäèðîâêå, "çíà÷åíèå"- ñèìâîë, ñîîòâåòñòâóþùèé ýòîé //áóêâå â Windows-êîäèðîâêå function MakeRusDict() { //Ñîçäàåì îáúåêò Dictionary RusDict = WScript.CreateObject("Scripting.Dictionary"); //Çàïîëíÿåì ïàðû "êëþ÷" (ñèìâîë â DOS-êîäèðîâêå)- "çíà÷åíèå" (ñèìâîë â //Window-êîäèðîâêå) äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà RusDict.add("€", "À"); RusDict.add("�", "Á"); RusDict.add("‚", "Â"); RusDict.add("ƒ", "Ã"); RusDict.add("„", "Ä"); RusDict.add("…", "Å"); RusDict.add("ð", "¨"); RusDict.add("†", "Æ"); RusDict.add("‡", "Ç"); RusDict.add("ˆ", "È"); RusDict.add("‰", "É"); RusDict.add("Š", "Ê"); RusDict.add("‹", "Ë"); RusDict.add("Œ", "Ì"); RusDict.add("�", "Í"); RusDict.add("Ž", "Î"); RusDict.add("�", "Ï"); RusDict.add("�", "Ð"); RusDict.add("‘", "Ñ"); RusDict.add("’", "Ò"); RusDict.add("“", "Ó"); RusDict.add("”", "Ô"); RusDict.add("•", "Õ"); RusDict.add("–", "Ö"); RusDict.add("—", "×"); RusDict.add("˜", "Ø"); RusDict.add("™", "Ù"); RusDict.add("š", "Ú"); RusDict.add("›", "Û"); RusDict.add("œ", "Ü"); RusDict.add("�", "Ý"); RusDict.add("ž", "Þ"); RusDict.add("Ÿ", "ß"); RusDict.add(" ", "à"); RusDict.add("¡", "á"); RusDict.add("¢", "â"); RusDict.add("£", "ã"); RusDict.add("¤", "ä"); RusDict.add("¥", "å"); RusDict.add("ñ", "¸"); RusDict.add("¦", "æ"); RusDict.add("§", "ç"); RusDict.add("¨", "è"); RusDict.add("©", "é"); RusDict.add("ª", "ê"); RusDict.add("«", "ë"); RusDict.add("¬", "ì"); RusDict.add("", "í"); RusDict.add("®", "î"); RusDict.add("¯", "ï"); RusDict.add("à", "ð"); RusDict.add("á", "ñ"); RusDict.add("â", "ò"); RusDict.add("ã", "ó"); RusDict.add("ä", "ô"); RusDict.add("å", "õ"); RusDict.add("æ", "ö"); RusDict.add("ç", "÷"); RusDict.add("è", "ø"); RusDict.add("é", "ù"); RusDict.add("ê", "ú"); RusDict.add("ë", "û"); RusDict.add("ì", "ü"); RusDict.add("í", "ý"); RusDict.add("î", "þ"); RusDict.add("ï", "ÿ"); }Ëèñòèíã 1.27. Äîñòóï ê ïîòîêó StdOut äî÷åðíåãî ïðîöåññà /*****************************************************************/ /* Èìÿ: ConToWin.js */ /* ßçûê: JScript */ /* Êîäèðîâêà: DOS */ /* Îïèñàíèå: Äîñòóï ê ïîòîêó StdOut äî÷åðíåãî ïðîöåññà */ /*****************************************************************/ var WshShell,theJob,s,IsBreak,RusDict; //Îáúÿâëÿåì ïåðåìåííûå //Ôóíêöèÿ äëÿ ñîçäàíèÿ îáúåêòà Dictionary ñ ïàðàìè "êëþ÷-çíà÷åíèå", ãäå //"êëþ÷"-áóêâà â DOS-êîäèðîâêå, "çíà÷åíèå"- ñèìâîë, ñîîòâåòñòâóþùèé ýòîé //áóêâå â Windows-êîäèðîâêå function MakeRusDict() { //Ñîçäàåì îáúåêò Dictionary RusDict = WScript.CreateObject("Scripting.Dictionary"); //Çàïîëíÿåì ïàðû "êëþ÷" (ñèìâîë â DOS-êîäèðîâêå)- "çíà÷åíèå" (ñèìâîë â //Window-êîäèðîâêå) äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà RusDict.add("€", "À"); RusDict.add("�", "Á"); RusDict.add("‚", "Â"); RusDict.add("ƒ", "Ã"); RusDict.add("„", "Ä"); RusDict.add("…", "Å"); RusDict.add("ð", "¨"); RusDict.add("†", "Æ"); RusDict.add("‡", "Ç"); RusDict.add("ˆ", "È"); RusDict.add("‰", "É"); RusDict.add("Š", "Ê"); RusDict.add("‹", "Ë"); RusDict.add("Œ", "Ì"); RusDict.add("�", "Í"); RusDict.add("Ž", "Î"); RusDict.add("�", "Ï"); RusDict.add("�", "Ð"); RusDict.add("‘", "Ñ"); RusDict.add("’", "Ò"); RusDict.add("“", "Ó"); RusDict.add("”", "Ô"); RusDict.add("•", "Õ"); RusDict.add("–", "Ö"); RusDict.add("—", "×"); RusDict.add("˜", "Ø"); RusDict.add("™", "Ù"); RusDict.add("š", "Ú"); RusDict.add("›", "Û"); RusDict.add("œ", "Ü"); RusDict.add("�", "Ý"); RusDict.add("ž", "Þ"); RusDict.add("Ÿ", "ß"); RusDict.add(" ", "à"); RusDict.add("¡", "á"); RusDict.add("¢", "â"); RusDict.add("£", "ã"); RusDict.add("¤", "ä"); RusDict.add("¥", "å"); RusDict.add("ñ", "¸"); RusDict.add("¦", "æ"); RusDict.add("§", "ç"); RusDict.add("¨", "è"); RusDict.add("©", "é"); RusDict.add("ª", "ê"); RusDict.add("«", "ë"); RusDict.add("¬", "ì"); RusDict.add("", "í"); RusDict.add("®", "î"); RusDict.add("¯", "ï"); RusDict.add("à", "ð"); RusDict.add("á", "ñ"); RusDict.add("â", "ò"); RusDict.add("ã", "ó"); RusDict.add("ä", "ô"); RusDict.add("å", "õ"); RusDict.add("æ", "ö"); RusDict.add("ç", "÷"); RusDict.add("è", "ø"); RusDict.add("é", "ù"); RusDict.add("ê", "ú"); RusDict.add("ë", "û"); RusDict.add("ì", "ü"); RusDict.add("í", "ý"); RusDict.add("î", "þ"); RusDict.add("ï", "ÿ"); } //Ôóíêöèÿ äëÿ ïåðåâîäà ñòðîêè èç DOS- â Windows-êîäèðîâêó function DosToWin(s) { var i,ss; //Îáúÿâëÿåì ïåðåìåííûå //Ïðîâåðÿåì, ñîçäàí ëè îáúåêò RusDict if (typeof(RusDict)=="undefined") //Åñëè îáúåêò RusDict íå ñîçäàí, ñîçäàåì åãî MakeRusDict(); ss=""; for (i=0;i<s.length;i++) { //Öèêë ïî âñåì ñèìâîëàì â ñòðîêå if (RusDict.Exists(s.charAt(i))) //Ïðîâåðÿåì íàëè÷èå ñèìâîëà â ñëîâàðå //Ïðåîáðàçóåì i-é ñèìâîë â Windows-êîäèðîâêó ss+=RusDict.Item(s.charAt(i)); else ss+=s.charAt(i); } return ss; } /************* Íà÷àëî *********************************************/ //Ñîçäàåì îáúåêò WshShell WshShell=WScript.CreateObject("WScript.Shell"); //Çàïóñêàåì äî÷åðíåå ïðèëîæåíèå theJob = WshShell.Exec("cscript"); IsBreak=false; for (;;) { if (!theJob.StdOut.AtEndOfStream) //Ñ÷èòûâàåì âñþ èíôîðìàöèþ, íàõîäÿùóþñÿ â ïîòîêå StdOut //äî÷åðíåãî ïðîöåññà s+=theJob.StdOut.ReadAll(); if (IsBreak) break; if (theJob.status==1) //Ïðîâåðÿåì, íå çàâåðøèëàñü ëè çàïóùåííàÿ çàäà÷à IsBreak=true; else WScript.Sleep(100); } //Ïðåîáðàçóåì ñôîðìèðîâàííûå ñòðîêè â Windows-êîäèðîâêó //è âûâîäèì èõ íà ýêðàí WScript.Echo(DosToWin(s)); /************* Êîíåö *********************************************/ Òàêèì îáðàçîì, ìîæíî ñ ïîìîùüþ ìåòîäà Exec çàïóñòèòü óòèëèòó êîìàíäíîé ñòðîêè, ïåðåäàâàòü åé íóæíóþ âõîäíóþ èíôîðìàöèþ ñ ïîìîùüþ ñâîéñòâà StdIn è ñ ïîìîùüþ ñâîéñòâà StdOut ïîëó÷àòü è àíàëèçèðîâàòü âûäàâàåìûå ýòîé óòèëèòîé ñòðîêè (ñîîòâåòñòâóþùèå ïðèìåðû ïðèâåäåíû òàêæå â ëèñòèíãàõ 2.37 è 2.38). Îáúåêò WshController Îáúåêò WshControllerèìååò åäèíñòâåííûé ìåòîä CreateScriptè ïðåäíàçíà÷åí äëÿ ñîçäàíèÿ îáúåêòà-ñöåíàðèÿ íà óäàëåííîé ìàøèíå.
Ñîçäàåòñÿ îáúåêò WshController ñëåäóþùèì îáðàçîì: var WshController=WScript.CreateObject("WshController"); Çàìå÷àíèå Ìåòîä CreateScriptâîçâðàùàåò óêàçàòåëü íà îáúåêò WshRemote, ñ ïîìîùüþ êîòîðîãî ìîæíî êîíòðîëèðîâàòü ñîñòîÿíèå óäàëåííîãî ñöåíàðèÿ è óïðàâëÿòü åãî âûïîëíåíèåì. Ïðè âûïîëíåíèè ýòîãî ìåòîäà WSH ïîñëåäîâàòåëüíî ïðîèçâîäèò ñëåäóþùèå äåéñòâèÿ: ? ïîäãîòàâëèâàåò ôàéë ñî ñöåíàðèåì äëÿ ïåðåñûëêè íà óäàëåííóþ ñòàíöèþ; ? ñ ïîìîùüþ ïðîòîêîëà DCOM ñîçäàåò ýêçåìïëÿð îáúåêòà WshRemoteíà óäàëåííîé ìàøèíå; ? ïåðåñûëàåò ñöåíàðèé íà óäàëåííóþ ñòàíöèþ äëÿ ïîñëåäóþùåãî âûïîëíåíèÿ ñ ïîìîùüþ ìåòîäà Executeîáúåêòà WshRemote. Ñèíòàêñèñ ìåòîäà CreateScript: CreateScript(CommandLine, [MachineName]) Ïàðàìåòð Âòîðîé íåîáÿçàòåëüíûé ïàðàìåòð Îáúåêò WshRemote Îáúåêò WshRemoteíåîáõîäèì äëÿ êîíòðîëÿ ñîñòîÿíèÿ ñöåíàðèåâ, êîòîðûå çàïóùåíû íà óäàëåííîé ìàøèíå.  ðåçóëüòàòå çàïóñêà òàêîãî ñöåíàðèÿ íà óäàëåííîé ìàøèíå ñîçäàåòñÿ ïðîöåññ, ïîýòîìó ìîæíî ñêàçàòü, ÷òî ýêçåìïëÿðîì îáúåêòà WshRemote, ñîîòâåòñòâóþùåãî âûïîëíÿþùåìóñÿ ñöåíàðèþ, ÿâëÿåòñÿ ïðîöåññ. Ñîçäàåòñÿ WshRemoteñ ïîìîùüþ ìåòîäà CreateScriptîáúåêòà WshController: var Controller,RemoteScript; Controller=WScript.CreateObject("WshController"); RemoteScript=Controller.CreateScript("d: WscriptsWMyScript.js", "Server1"); Îáúåêò WshRemoteèìååò äâà ñâîéñòâà: Errorè Status.  ñâîéñòâå Errorõðàíèòñÿ ññûëêà íà îáúåêò WshRemoteError, êîòîðûé ñîäåðæèò èíôîðìàöèþ îá îøèáêå, ïðèâåäøåé ê àâàðèéíîìó çàâåðøåíèþ ðàáîòû óäàëåííîãî ñöåíàðèÿ. ×èñëîâîå ñâîéñòâî Statusïîçâîëÿåò îïðåäåëèòü ñîñòîÿíèå ñöåíàðèÿ, ðàáîòàþùåãî àñèíõðîííî íà óäàëåííîé ìàøèíå. Âîçìîæíûå çíà÷åíèÿ ñâîéñòâà Statusïðèâåäåíû â òàáë. 1.19. Òàáëèöà 1.19. Çíà÷åíèÿ ïàðàìåòðà
Äâà èìåþùèõñÿ ó îáúåêòà WshRemoteìåòîäà ïîçâîëÿþò ñîîòâåòñòâåííî çàïóñòèòü óäàëåííûé ñöåíàðèé (ìåòîä Execute) èëè ïðèíóäèòåëüíî çàâåðøèòü åãî âûïîëíåíèå (ìåòîä Terminate); îáà ýòè ìåòîäà íå èìåþò ïàðàìåòðîâ. Ìåòîä Terminate, ïîäîáíî îäíîèìåííîìó ìåòîäó îáúåêòà WshScriptExec, ïûòàåòñÿ çàêðûòü ïðèëîæåíèå, ïîñûëàÿ åìó ñîîáùåíèå WM_CLOSE(åñëè ýòî íå ñðàáàòûâàåò, ïðîöåññ çàâåðøàåòñÿ ïðèíóäèòåëüíî). Êðîìå ñâîéñòâ è ìåòîäîâ, îáúåêò WshRemote ìîæåò ãåíåðèðîâàòü òðè ñîáûòèÿ, êîòîðûå îïèñàíû â òàáë. 1.20. Òàáëèöà 1.20. Ñîáûòèÿ îáúåêòà
Äëÿ îáðàáîòêè â ñöåíàðèÿõ ñîáûòèé, ïðèâåäåííûõ â òàáë. 1.20, íåîáõîäèìî ïîäêëþ÷èòüñÿ ê îáúåêòó WshRemote ñ ïîìîùüþ ìåòîäà ConnectObject îáúåêòà WScript (ëèñòèíã 1.28). Ëèñòèíã 1.28. Îáðàáîòêà ñîáûòèé îáúåêòà WshRemote (JScript)/**********************************************************************/ /* Èìÿ: RemoteEvents.js */ /* ßçûê: JScript */ /* Îïèñàíèå: Îáðàáîòêà ñîáûòèé, âîçíèêàþùèõ ïðè âûïîëíåíèè óäàëåííîãî */ /* ñöåíàðèÿ */ /**********************************************************************/ Var Controller,RemScript,IsQuit; //Îáúÿâëÿåì ïåðåìåííûå //Ñîçäàåì îáúåêò WshController Controller = WScript.CreateObject("WshController"); //Ñîçäàåì ñöåíàðèé íà óäàëåííîé ìàøèíå (îáúåêò WshRemote) RemScript = Controller.CreateScript("D:\RemoteScript.js ", "stand"); //Óñòàíàâëèâàåì ñîåäèíåíèå ñ îáúåêòîì WshRemote WScript.ConnectObject(RemScript, "RemoteScript_"); RemScript.Execute(); //Çàïóñêàåì óäàëåííûé ñöåíàðèé IsQuit = False; while (!IsQuit) WScript.Sleep(100); //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê WScript.Quit(); //Âûõîäèì èç ñöåíàðèÿ /*************** Ôóíêöèè-îáðàáîò÷èêè ñîáûòèé ***********************/ function RemoteScript_End { //Ñîáûòèå End WScript.Echo("Âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî"); IsQuit = True; } function RemoteScript_Error { //Ñîáûòèå Error //Âûâîäèì íà ýêðàí îïèñàíèå âîçíèêøåé îøèáêè WScript.Echo("Îøèáêà ïðè âûïîëíåíèè óäàëåííîãî ñöåíàðèÿ: " + RemScript.Error.Description); IsQuit = True; } function RemoteScript_Start { //Ñîáûòèå Start WScript.Echo("Óäàëåííûé ñöåíàðèé çàïóùåí"); } /************* Êîíåö *********************************************/ Îáúåêò WshRemoteError Îáúåêò WshRemoteErrorñîçäàåòñÿ àâòîìàòè÷åñêè ïðè âîçíèêíîâåíèè îøèáêè âî âðåìÿ âûïîëíåíèÿ ñöåíàðèÿ íà óäàëåííîé ìàøèíå è ñîäåðæèò èíôîðìàöèþ îá ýòîé îøèáêå. Ññûëêà íà îáúåêò WshRemoteErrorõðàíèòñÿ â ñâîéñòâå Errorñîîòâåòñòâóþùåãî îáúåêòà WshRemote. Ñâîéñòâà îáúåêòà WshRemoteErrorîïèñàíû â òàáë. 1.21 (ìåòîäîâ ó ýòîãî îáúåêòà íåò). Òàáëèöà 1.21. Ñâîéñòâà îáúåêòà
Äëÿ ïîëó÷åíèÿ èíôîðìàöèè î âîçíèêøåé ïðè âûïîëíåíèè óäàëåííîãî ñöåíàðèÿ îøèáêå ìîæíî èñïîëüçîâàòü îáðàáîò÷èê ñîáûòèÿ Errorîáúåêòà WshRemote; ñîîòâåòñòâóþùèå ïðèìåðû ïðèâåäåíû â ëèñòèíãàõ 1.28, 2.56 è 2.57. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Ãëàâíàÿ | Êîíòàêòû | Íàø¸ë îøèáêó | Ïðèñëàòü ìàòåðèàë | Äîáàâèòü â èçáðàííîå |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||