Skriptid Windows 7-s. Skripti käivitamine käsurealt konsoolirežiimis. Võimaluse korral kasutage keskkonnamuutujaid

Sisse/välja ja sisenemise/väljumise skriptide loomine

Tuletagem meelde, et Windows XP/2000/NT puhul kasutatakse kasutajakeskkonna konfigureerimiseks profiile (kohalik ja server), mis sisaldavad kõiki kasutaja seadistatavaid parameetreid: keele- ja piirkonnaseadeid, hiire sätteid ja helisignaalid, ühendatud võrgudraivid ja printerid jne. Serverisse salvestatud profiilid pakuvad kasutajatele sama töökeskkond olenemata sellest, millisest arvutist (Windowsi põhine) kasutaja registreerus. Kasutajaprofiilide loomist ja hooldamist kirjeldatakse peaaegu kõigis selleteemalistes raamatutes Windowsi haldus ja seda siin ei arvestata.

Alustades Windows NT-st, saate lisaks profiilidele ka kasutajakeskkonna konfigureerida sisselogimisskriptid (registreerimisskriptid)- WSH-skriptid, käsud või käivitatavad failid, mis käivitatakse kasutaja masinas iga kord, kui ta võrku või kohalikku registreerub tööjaam. See võimaldab administraatoril seadistada ainult mõningaid kasutaja keskkonna parameetreid ilma teisi seadistusi segamata; Lisaks on sisselogimisskripte lihtsam luua ja hooldada kui profiile.

Operatsioonisüsteemis Windows XP/2000 saate rühmapoliitika objektide jaoks valikuliselt määrata järgmist tüüpi skripte.

? Sisselülitamise stsenaariumid, mis käivitatakse automaatselt operatsioonisüsteemi käivitumisel ja enne kasutajate registreerumist.

? Grupipoliitika sisselogimisskriptid, mis käivitatakse automaatselt kasutaja registreerumisel ja enne selle kasutaja jaoks ülalmainitud tavalise registreerimisskripti käivitamist.

Väljuvad skriptid, mis käivitatakse automaatselt pärast kasutaja seansi lõppu.

? Väljalülitamise stsenaariumid, mis käivitatakse automaatselt, kui Windows lülitub välja.

Näidete testimise hõlbustamiseks kaalume täiendavalt sisse-/välja- ja sisse-/väljalogimisskripte, mis on salvestatud Windows XP-ga kohalikku tööjaama. Allpool kirjeldame üksikasjalikult, millistesse spetsiaalsetesse kaustadesse peate ühte või teist tüüpi skripte salvestama ja kuidas need skriptid on ühendatud. Sisse-/välja- ja sisse-/väljalogimisstsenaariumide kasutamiseks kataloogiteenusega võrgus Active Directory peate lihtsalt skriptid üle kandma domeenikontrolleri vastavatesse kaustadesse ja kasutama lisandmoodulit Active Directory – kasutajad ja arvutid(Active Directory – kasutajad ja arvutid) MMC, et määrata need skriptid vastavatele rühmapoliitika objektidele.

Skriptid, mis käivitatakse operatsioonisüsteemi käivitamisel

Lubamis-/keelamisskriptid, nagu rühmapoliitika sisse-/väljumisskriptid, on lubatud lisandmooduli abil Grupipoliitika(Grupipoliitika) MMC-s. Lisandmooduli lisamise protsess Grupipoliitika(Grupipoliitika) kohaliku tööjaama jaoks kirjeldati üksikasjalikult artiklis osa "Kohalike ja kaug-WSH-skriptide blokeerimine. Haldusmalli näide" 4. peatükis(joonis 11.8).

Riis. 11.8. Grupipoliitika viisard

Konkreetse lubamise stsenaariumi lubamiseks peate valima jaotise Konfiguratsioon Arvuti|Windowsi konfiguratsioon|Skriptid (käivitamine/väljalülitamine)(Computer Configuration | Windows Configuration|Scripts (Startup/Shutdown)) ja valige atribuut (Startup), misjärel kuvatakse dialoogiboks (Properties: Startup) (joon. 11.9).

Riis. 11.9. Installitud lubamisskriptide loend

Lisama(Lisa) ja dialoogiboksis Skripti lisamine(Skripti lisamine) määrake nimi soovitud faili(selleks võite kasutada nuppu Ülevaade(Sirvi)) ja vajadusel skripti parameetrid (joonis 11.10).

Pange tähele, et vaikimisi salvestatakse lubamisskriptid kataloogi %SystemRoot%\System32\GroupPolicy\Machine\Scripts\Startup.

Riis. 11.10. Luba skripti nimi ja parameetrid

Skriptid, mis käitatakse operatsioonisüsteemi väljalülitamisel

Sulgemisskriptide lubamiseks peate valima atribuudi Lülita välja(Seiskamine) jaotises Skriptid (start/stopp)(Skriptid (Startup/Shutdown)), mille järel kuvatakse dialoogiboks Omadused: Seiskamine(Omadused: Seiskamine) (Joon. 11.11).

Riis. 11.11. Installitud sulgemisskriptide loend

Nagu eelmisel juhul, peate uue stsenaariumi lisamiseks klõpsama nuppu Lisama(Lisa) ja dialoogiboksis Skripti lisamine(Skripti lisamine) määrake vajaliku faili nimi (vaikimisi salvestatakse sulgemisskriptid kataloogi %SystemRoot%\System32\GroupPolicy\Machine\Scripts\Shutdown) ja skripti parameetrid.

Sisselogimisskriptid kõigile kohalikud kasutajad

Grupipoliitika sisselogimisskriptid on lisatud jaotisesse Kasutaja konfiguratsioon|Windowsi konfiguratsioon|Skriptid (sisselogimine/väljalogimine)(Kasutaja konfiguratsioon|Windowsi konfiguratsioon|Skriptid (sisselogimine/väljalogimine)). Selles jaotises peate valima kinnisvara Logi sisse(Logi sisse), mille järel kuvatakse dialoogiboks Omadused: sisselogimine(Omadused: sisselogimine) (Joon. 11.12).

Uue sisselogimisskripti lisamiseks klõpsake nuppu Lisama(Lisa) ja dialoogiboksis Skripti lisamine(Skripti lisamine) määrake nõutava faili nimi (vaikimisi salvestatakse sulgemisskriptid kataloogi %SystemRoot%\System32\GroupPolicy\User\Scripts\Logon) ja skripti parameetrid.

Riis. 11.12. Installitud sisselogimisskriptide loend

Välju skriptist kõigi kohalike kasutajate jaoks

Väljumisskriptide ühendamiseks peate valima atribuudi Logi välja(Logi välja) jaotises Skriptid (sisse-/väljalogimine)(Skriptid (Logon/Logoff)), mille järel kuvatakse dialoogiboks Omadused: Väljalogimine(Omadused: Logoff) (Joon. 11.13).

Uue stsenaariumi lisamiseks klõpsake nuppu Lisama(Lisa) ja dialoogiboksis Lisand skript (Skripti lisamine) määrab vajaliku faili nime (vaikimisi salvestatakse väljumisskriptid kataloogi %SystemRoot%\System32\GroupPolicy\User\Scripts\Logoff) ja skripti parameetrid.

Riis. 11.13. Installitud väljumisskriptide loend

Ühe kasutaja sisselogimise stsenaarium

Sisselogimisskriptid jaoks üksikud kasutajad lisandmooduli abil määratud (kohalikud kasutajad ja rühmad).

Kommenteeri

Windows NT-s kasutati selleks domeeni kasutajahaldurit.

Selle lisandmooduli lisamiseks MMC-konsooli valige üksus Lisage või eemaldage lisandmoodul(Lisa/eemalda lisandmoodul) menüüs konsool(konsool) ja vajutage nuppu Lisama(Lisama). Valige kuvatud kõigi saadaolevate lisandmoodulite loendist üksus Kohalikud kasutajad ja rühmad(Kohalikud kasutajad ja rühmad) ja klõpsake nuppu Lisama(Lisama). Pärast seda ilmub dialoogiboks, milles peate märkima, et valitud lisandmoodul juhib kohalikku arvutit ja klõpsama nuppu Valmis(Finish) (joon. 11.14).

Riis. 11.14. Lisandmooduliga juhitava arvuti valimine Kohalikud kasutajad ja rühmad

Me ei lisa konsooliaknasse muid lisandmooduleid, seega vajutame nuppu Sulge(Sule) lisandmoodulite loendis ja nupp Okei lisandmoodulite lisamise/eemaldamise aknas. Pärast seda saame konsooliaknas vaadata kohalike arvutikasutajate nimekirja ja muuta nende omadusi (joonis 11.15).

Riis. 11.15. kasutajate loend kohalik arvuti

Kasutajale sisselogimisskripti määramiseks valige loendist see kasutaja (näiteks Popov) ja minge vahekaardile Profiil(Profiil) kasutaja omaduste dialoogis. Sisselogimisskripti nimi sisestatakse väljale Sisselogimisskript(Loon Script) selle akna (joonis 11.16).

Riis. 11.16. Kasutajaprofiili sätted

Sisselogimisskripti tee peab olema suhteline kataloogiga %SystemRoot%\System32\Repl\Import\Scripts. Kui näiteks kasutaja Popovi skript scr99.bat asub kataloogis täisnimega F:\Windows\System32\Repl\Import\Scripts\Script99, siis peaks sisselogimisskripti tee olema \Script99\scr99 .nahkhiir.

Sisselogimise/väljalogimise skriptide näidised

Allpool on mitu skripti (neist kaks on tavalised pakkfailid), mida saab kasutada sisenemis- või väljumisskriptidena.

Võrgudraivide ühendamine ja aja sünkroonimine kasutajate registreerimisel

Tihti kasutatakse sisselogimisskripte printeridraivide ja portide ühendamiseks võrguressurssidega, samuti kasutaja arvutite süsteemiaja sünkroonimiseks süsteemi aeg konkreetne server (see on vajalik näiteks reaalajas toimivate failiserver-pangasüsteemide jaoks). Loomulikult saab nendel eesmärkidel kirjutada WSH-skripti, kuid sellistel juhtudel on lihtsam piirduda tavalise käsu (pakk)failiga. Pange tähele, et partiifailides saate kasutada erinevad kommunaalteenused käsurida Windows NT/2000/XP Resource Kit pakettidest, mille abil saab paljusid probleeme kõige kiiremini ja lihtsamalt lahendada. Näitena mainime vaid ühte kasulikku käsku IFMEMBER, mis võimaldab ilma ADSI-d kasutamata kontrollida, kas registreeriv kasutaja kuulub kindlasse gruppi.

Kommenteeri

Neid, kes soovivad rohkem teada saada Windowsi pakifailide võimaluste ja neis kasutatavate käskude kohta, võib soovitada minu eelmises raamatus.

Oletame, et konkreetse kasutaja registreerimisel peame tegema järgmist:

1. Sünkroonige kliendi tööjaama süsteemiaeg Server1 serveri süsteemiajaga.

2. Ühendage draiv M: võrguressursiga \\Server1\Letters.

3. Sisestage klientarvuti kataloog C:\TEXT ühine kasutamine nimega RAAMATUD.

Selleks saab määrata kasutajale registreerimisskriptina käsufaili Logon.bat, mis koosneb (koos kommentaaridega) vaid kuuest reast (loetelu 11.9).

Nimekiri 11.9. Sisselogimisskripti faili näide

REM-nimi: Logon.bat

REM Kirjeldus: Pakettfaili kasutamine sisselogimisskriptina

NETAEG \\Server1 /SET

NETO SHARE MyTxt=C:\TEXT

Faili Logon.bat esimesel real keelame ekraanil käskude dubleerimise režiimi:

Aja sünkroonimine serveriga \\Server1 tehakse käsu NET TIME lülitiga /SET:

NETAEG \\Server1 /SET

Võrguketas on ühendatud käsuga NET USE:

NET USE M: \\ Server1 \ Letters / PÜSIV: EI

Klahv /PÜSIV : Ajutiste ühenduste loomiseks (ei ole püsiv pärast kasutajaseansi lõppu) on käsu NET USE käsk NO. Kui ühendused olid püsivad (/PERSISTENT:YES), ilmneb järgmine kord, kui kasutaja sisse logib, tõrge ( taaskasuta olemasolev ühendus).

Lõpuks jagatakse kausta C:\TEXT käsuga NET SHARE:

NETO SHARE MyTxt=C:\TEXT

Käivitusprogrammide interaktiivne valik

Nagu teate, alammenüüs Programmid(Programmid) Windowsi käivitusmenüüs on üksus (Startup), kuhu saab paigutada otseteed nendele programmidele, mis peaksid kasutaja süsteemis registreerumisel automaatselt käivituma. Kuid oma profiili laadimise ajal ei ole kasutajal võimalust käivitada käivituskaustast ainult teatud programme - ta võib käivitada kõik programmid või mitte ühtegi käivitada (selleks peate registreerimisel klahvi all hoidma süsteemis ).

Kirjutame Logon.js skripti, mis võimaldab kasutajal valida sisselogimisel käivitatavad programmid; Määrates selle skripti rühmapoliitika sisselogimisskriptiks, muudame rakenduse käivitusprotsessi interaktiivseks.

Alustame loomisega kataloogis %SystemDrive%\Documents and Settings\All Users \ Peamenüü, mis salvestab kõikidele kasutajatele startmenüüst programmide otseteed, kausta ja paigutab sinna soovitud rakenduste otseteed (joonis 11.17).

Pärast seda tuleb tavalisest kaustast otseteed eemaldada. Vaatleme nüüd sisselogimisskripti Logon.js algoritmi.

Kõigepealt peate määrama valikulise käivituskausta tee (PathStartup muutuja). Selleks kasutame objekti WshSpecialFolders:

//Looge WshShelli objekt

Riis. 11.17. uus kaust

Teades teed soovitud kausta, moodustame kogu selles sisalduvatest failidest (muutuja Failid):

Pärast seda kuvame dialoogiboksi, mis küsib, kas peame käivitama programme käivituskaustast pakkrežiimis, st. kõik korraga (joonis 11.18).

Riis. 11.18. Programmi käivitusrežiimi valimine (partii või interaktiivne)

Olenevalt dialoogiaknas vajutatavast nupust omistame muutujale IsRunAll loogilise väärtuse, mis määrab programmide käivitusrežiimi (kui IsRunAll on vale, siis palutakse igal programmil see käivitada, vastasel juhul käivituvad kõik programmid ilma hoiatuseta ):

Res=WshShell.Popup("Käivita kõik programmid korraga?", 0,

//Määrake, kas nuppu "Jah" on vajutatud

while (!Files.atEnd()) (

File=Files.item();

Files.moveNext();

Kui eelnevalt valitud interaktiivne režiim käivitage programmid (muutuja IsRunAll on vale), siis kuvame taotluse käimasoleva faili käivitamiseks (joonis 11.19):

//Lähtesta Res muutuja nullile Res=0;

Res=WshShell.Popup("Käivita "+Fail.Nimi+"?", 0, "Selective startup", vbQuestion+vbYesNo);

Riis. 11.19. Taotlege käivituskaustast ühe programmi käivitamist

Kui kasutaja otsustab programmi käivitada (muutuja Res võrdub vbYes) või programmid käivitatakse pakettrežiimis, siis käivitame praeguse programmi minimeeritud aknas, kasutades WshShelli objekti Run meetodit:

if ((IsRunAll) || (Res=vbYes))

WshShell.Run("\""+Fail.Path+" \"", vbMinimizedFocus);

Kuna käivitatava programmi täisnimi võib sisaldada tühikuid, tuleb nimi panna jutumärkidesse, kasutades paojärjestust.

Kommenteeri

Teine võimalus selliste programmide käivitamiseks, mille nimed sisaldavad tühikuid, kasutades Run-meetodit, on kasutada lühikesed nimed kaustu ja faile File objekti atribuudi ShortPath kaudu: WshShell.Run(File.ShortPath, vbMinimizedFocus);

Täielik Logon.js skript on näidatud loendis 11.10.

Nimekiri 11.10. Sisselogimisskript, mis võimaldab teil valida käivitusprogramme

//*******************************************************************/

/* Nimi: Logon.js */

/* Keel: JScript */

/* Kirjeldus: sisselogimisskript, mis võimaldab valida programme */

/* automaatselt laadib */

/*******************************************************************/

//Muutujate deklareerimine

PathStartup, //tee valikulise käivituskausta

Kaust, //Kausta objekti Folder eksemplar

//valikuline käivitamine

Failid, //Failide kogumine valikulises käivituskaustas

Fail, //Kausta otsetee objekti Fail eksemplar

//valikuline käivitamine

Res, //Nuppude vajutamise tulemus dialoogiboksides

IsRunAll; //Boole'i ​​lipp, mis näitab, kas käivitada

//kõik programmid käivitamisest korraga

var vbYesNo=4,vbQuestion=32,vbYes=6,vbOkOnly=0,vbMinimizedFocus=2;

//Looge WshShelli objekt

WshShell=WScript.CreateObject("Wscript.Shell");

//Looge objekt WshSpecialFolders

WshFldrs=WshShell.SpecialFolders;

//Määrake valikulise käivituskausta tee

PathStartup=WshFldrs.item("AllUsersStartMenu")+"\\Selective startup\\";

//Looge FileSystemObject objekt

FSO=WScript.CreateObject("Skriptimine.FileSystemObject");

//Looge valikulise käivituskausta jaoks kaustobjekt

Folder=FSO.GetFolder(PathStartup);

//Looge valikulisest käivituskataloogist failide kogu

Failid=uus loendaja(Kaust.Failid);

//Väljustab päringu kõigi programmide korraga käivitamiseks

Res=WshShell.Popup("Käivita kõik programmid korraga?",0,

//Määrake, kas nuppu Jah on vajutatud

IsRunAll=(Res==vbYes);

//Silmus läbi kõigi valikulise käivituskataloogi failide

while (!Files.atEnd()) (

//Looge praeguse koguelemendi jaoks failiobjekt

File=Files.item();

//Lähtestage Res muutuja nulliks

if (!IsRunAll) //Programme tuleb käivitada ükshaaval

//Väljustab päringu ühe programmi käivitamiseks

Res=WshShell.Popup("Käivita "+Fail.Nimi+"?",0,

if ((IsRunAll) || (Res==vbYes))

//Käivita praegune programm minimeeritud aknas

WshShell.Run("\""+Fail.Path+"\"",vbMinimizedFocus);

//Minema järgmine fail kollektsioonis

Files.moveNext();

Kasutajadokumentide varundamine tööseansi lõpus

Igaühele Windowsi kasutaja XP loob automaatselt kataloogi Dokumendid ja sätted isikliku kausta, mille nimi ühtib selle kasutaja nimega. Vaikimisi salvestatakse kõik kasutaja loodud dokumendid selle kausta alamkataloogi Minu dokumendid. Kasutajadokumentidest alati varukoopia saamiseks võite kirjutada universaalse väljumisskripti, millesse kopeeritakse kõik failid ja alamkataloogid kasutajate kataloog"Minu dokumendid" teise kasutajanimega kataloogi. Meie näites salvestatakse dokumentide varukoopiad kataloogi D:\Backup, st. kui kasutaja Popov välja logib, kopeeritakse kõik tema dokumendid kataloogi D:\Backup\Popov ja kui kasutaja Kazakov logib välja - kataloogi D:\Backup\Kazakov.

Partiifail

Selle probleemi kiireim lahendus on luua pakkfail Logoff.bat (loetelu 11.11) ja määrata see kõigi kasutajate väljumisskriptiks. Selle pakkfaili tulemus on nähtav käsuaknas (joonis 11.20).

Nimekiri 11.11. Käsu failist väljumise skript, mis võimaldab teil: kasutaja dokumente varundada

REM-nimi: Logoff.bat

REM Kirjeldus: BAT-fail, mis teeb varukoopia

REM-i kasutaja dokumendid

ECHO lõpetab kasutaja %UserName%.

ECHO Alustame dokumentide kopeerimist kataloogi D:\Backup\%UserName%...

XCOPY /C /D /E /I /Y "%HomeDrive%%HomePath%\My Documents" D:\Backup\%UserName%

ECHO Dokumendi kopeerimine on lõppenud.

Nagu näeme, on faili Logoff.bat kogu ülesanne helistada XCOPY käsud vajalike kataloogide jaoks:

XCOPY /C /D /E /I /Y "%HomeDrive%%HomePath%\My Documents" "D:\Backup\%UserName%"

Riis. 11.20. Väljumisskripti Logoff.bat tulemus kasutaja Popovi jaoks

Siin on mitu XCOPY klahvi, mis võimaldavad:

Ärge katkestage kopeerimist, kui ilmneb tõrge (/C lüliti);

Kopeerige ainult need failid, mida on muudetud (klahv /D);

Kopeeri kõik alamkataloogid, ka tühjad (klahv /E);

Loo vajadusel kataloog, kuhu koopia tehakse (klahv /I);

Failide ülekirjutamine ilma kasutaja kinnituseta (klahv/Y).

Kommenteeri

XCOPY käsulülitite kohta lisateabe saamiseks vaadake selle käsu sisseehitatud spikrit. Selle spikri kuvamiseks ekraanil peate käivitama XCOPY käsuaknas koos /? ; Abi tekstifaili väljastamiseks peate kasutama väljundi ümbersuunamise sümbolit ">", näiteks: XCOPY /? > spr.txt .

Teed kataloogi, kuhu kasutaja dokumente salvestatakse, ja kataloogi, kuhu kopeeritakse, moodustatakse keskkonnamuutujate %HomeDir% , %HomePath% ja %UserName% abil. Nende ja mõnede teiste Windowsis määratletud keskkonnamuutujate kirjeldus on toodud tabelis. 11.2.

Tabel 11.2. Keskkonnamuutujad, mis on kasulikud sisse-/väljalogimisskriptides kasutamiseks

Muutuv Kirjeldus
%COMSPEC% Võimalus käsu tõlk
%HOMEDIR% Alistatud draivitäht kasutaja arvutis, mis viitab võrguressurss mis sisaldab kasutaja isiklikku kataloogi
%HOMEDRIVE% Kohalik või ümbersuunatud ketas, millel asub isiklik kataloog
%HOMEPATH% Isikliku kataloogi tee
%HOMESHARE% Jagatud kataloogi nimi, sealhulgas isiklik kataloog ja kohalik või tühistatud draiv
%OS% Operatsioonisüsteem, mis juhib tööjaama
%PROCESSOR_ARCHITECTURE% Kasutaja tööjaama protsessori arhitektuur (näiteks x86).
%SYSTEMDRIVE% Draiv, kus asub Windowsi süsteemikataloog
%SYSTEMROOT% Windowsi süsteemikataloogi tee
%PROCESSOR_LEVEL% Kasutaja tööjaama protsessori tüüp
%TEMP% Tee salvestuskataloogi ajutised failid
%USERDOMAIN% Domeen, kuhu kasutaja on registreeritud
%USERNAME% Nimi, mille all kasutaja võrku sisse logides registreerus

Kuna XCOPY käsus olevad katalooginimed võivad sisaldada tühikuid, on need nimed jutumärkides.

WSH skript

Vajalike varukoopiate loomiseks saame kirjutada ka WSH-skripti (nimetagem seda skripti Logoff.js), mis on loomulikult palju suurem kui pakifail, kuid väljastab sõnumid ilusates graafilistes dialoogiboksides ( joon 11.21–11.23) .

Esiteks loob skript Logoff.js objektide WshShell , FileSystemObject ja WshSpecialFolders eksemplarid, mille järel määratakse muutuja SHomePath teeks praeguse kasutaja dokumentidega kataloogi (spetsiaalne kaust nimega My Documents):

//Looge WshShelli objekt

//Looge FileSystemObject objekt

//Looge objekt WshSpecialFolders

WshFldrs=WshShell.SpecialFolders;

//Määrake valikulise käivituskausta tee

Tee kataloogi, kuhu dokumendid kopeeritakse, moodustatakse keskkonnamuutuja %UserName% abil; sellise muutuja väärtus saadakse WshShelli objekti meetodi ExpandEnvironmentStrings() abil:

//Kasutajanime määratlemine

//kasutaja

SBackupPath+=SUserName;

Kopeerime dokumente alles pärast seda, kui kasutaja on vastavale küsimusele jaatava vastuse andnud (vt joonis 11.21):

Res=WshShell.Popup("Varunda dokumendid asukohta\n" + SBackupPath + " ?", 0, "Kasutaja väljumine " + SUserName, vbQuestion+vbYesNo);

Riis. 11.21. Dialoogiboks, kus küsitakse, kas soovite kopeerida

Kui kasutaja on nõus, kopeerime soovitud kataloogi meetodiga CopyFolder() ja teeme seda try…catch konstruktsiooni try ploki sees.

Kui ilmneb tõrge, määratakse püüdmisplokis muutuja IsError väärtuseks Tõene ja kuvatakse vastava teatega dialoogiboks (vt joonis 11.22):

püüda (е) ( //Võimalike vigade käsitlemine

//Kuvab veateate

Mess="Viga kataloogi "+SHomePath+" kopeerimisel\nVeakood: " + e.number + "\nKirjeldus: " + e.kirjeldus;

WshShell.Popup(Mess, 0, "Kasutaja väljumine" + SUserName, vbCritical);

Riis. 11.22.

Kui kopeerimise käigus tõrkeid ei esinenud (muutuja IsError on väär), antakse kasutajale ka sellekohane teade (vt joonis 11.23):

//Kopeerige kataloog

FSO.CopyFolder(SHomePath, SBackupPath);

//Kõik on korras

Mess = "Dokumendid kopeeritud";

WshShell.Popup(Mess, 0, "Kasutaja väljalogimine" + SUserName, vbInformation);

Riis. 11.23. Dialoogiboks, mis näitab tõrke ilmnemist

Täielik Logoff.js skript on näidatud loendis 11.12.

Nimekiri 11.12. JScripti väljumisskript kasutaja dokumentide varundamiseks

/* Nimi: Logoff.js */

/* Keel: JScript */

/* Kirjeldus: Varundamist võimaldavast skriptist väljumine */

/* kasutaja dokumentide kopeerimine */

/********************************************************************/

//Muutujate deklareerimine

WshShell, //WshShelli objekti eksemplar

WshFldrs, //objekti WshSpecialFolders eksemplar

FSO, //objekti FileSystemObject eksemplar

SUserDocPath, //tee kasutaja dokumentidega kausta

SUserName, //Kasutajanimi

SBackupPath="D:\\Backup\\", //Dokumentide varukoopiate kataloog

//Initsialiseeri konstandid jaoks dialoogibokse

var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0,

//Looge WshShelli objekt

WshShell = WScript.CreateObject("WScript.Shell");

//Looge FileSystemObject objekt

FSO = WScript.CreateObject("Skriptimine.FileSystemObject");

//Looge objekt WshSpecialFolders

WshFldrs=WshShell.SpecialFolders;

//Määrake valikulise käivituskausta tee

SHomePath=WshFldrs.item("Minu dokumendid");

//Kasutajanime määratlemine

SUserName=WshShell.ExpandEnvironmentStrings("%UserName%");

//Moodustage kataloogi täielik tee koos dokumentide varukoopiatega

//kasutaja

SBackupPath+=SUserName;

//Taotlus luua varukoopia

Res=WshShell.Popup("Varunda dokumendid asukohta\n"+

SBackupPath+" ?", 0, "Kasutaja väljumine "+SUserName, vbQuestion+vbYesNo);

if (Res==vbYes) ( //Yes nuppu vajutatud

//Kopeerige kataloog

FSO.CopyFolder(SHomePath,SBackupPath);

) püüda (e) ( //Võimalike vigade käsitlemine

//Kuvab veateate

Mess="Viga kataloogi "+SHomePath+" kopeerimisel\nVeakood: "+

e.number+"\nKirjeldus: "+e.kirjeldus;

WshShell.Popup(Mess,0,"Kasutaja väljumine "+SUserName,vbCritical);

//Kõik on korras

Mess="Dokumendid kopeeritud";

WshShell.Popup(Mess,0,"Kasutaja väljalogimine "+SUserName,vbInformation);

/************* Lõpp *********************************** **********/

Skriptide loomine ja nende kasutamine protsessis Windowsi haldus- väga mugav meetod, mida ei tohiks unustada. Kui teil on GUI, ei pruugi alati olla selge, kuidas skripte kasutada. Ei pruugi olla selge, kui palju stsenaariumide kirjutamise õppimine ajaliselt maksma läheb ja, nagu öeldakse, kas mäng on küünalt väärt. Või on neid nimesid raske mõista - WSH, WMI, ADSI, lõputud objektid, meetodid, protseduurid ja funktsioonid. Samal ajal on paljudel administraatoritel tunne, et skriptide kasutamise võib ilma kahju tekitamata tähelepanuta jätta. Siiski ei tohiks ignoreerida skriptimise võimet. Kiiresti koostatud skript säästab oluliselt nii aega kui ka vaeva. Ja mida rohkem selliseid stsenaariume, seda parem.

Selles artiklis tahaksin selgitada, millal kasutada skriptimismootoreid, mõningaid nende kirjutamise põhikontseptsioone ja mõnda praktilisi nõuandeid(vt külgriba). Lisaks tutvustan ja kommenteerin VBScripti koodi, mis lahendab levinud probleemi. Valik langes VBScriptile, kuna Windows toetab seda keelt. Windows toetab ka JScripti, kuid ajakirja varasemad numbrid kasutasid pigem VBScripti, mistõttu on mõttekas säilitada järjepidevus.

Miks skriptid?

Skripti programmeerimine võtab kauem aega kui ülesande ühekordne käsitsi tegemine, isegi kui kogenud VBScripti programmeerija tunneb probleemi lähedalt. Kui te pole professionaal, võtab skripti kirjutamine ja silumine palju rohkem aega kui graafilise liidese kasutamine. Miks siis stsenaariumi kaasata?

Haldusskriptide peamine eesmärk on automatiseerida sageli korduvaid ülesandeid. Kui administraator seisab silmitsi ülesandega, mida tuleb täita mitu korda või regulaarselt, on mõttekas usaldada selle lahendamine skriptile. On ilmne, et sel juhul lahendatakse kõik sellised probleemid kiiresti ja ühtlaselt. Lisaks võimaldab skriptimine luua haldustööriistu, mida GUI-s pole.

Kui GUI abil pole probleemi lihtne lahendada, siis võib-olla tasub pöörduda operatsioonisüsteemiga või ressursikomplekti kuuluvate käsurea utiliitide poole? Neid utiliite on soovitatav kasutada alati, kui see on mõttekas. Kuid operatsioonisüsteemis Windows 2000 ei vasta GUI-programmide komplekt täpselt käsurea utiliitide komplektile ja mõned utiliidid ei pruugi käesolevat ülesannet täielikult rahuldada. Pakettfailid ei lahenda alati olukordi, kus sisendandmevoogu tuleb hästi muuta. Lisaks ei ole käsurea utiliidid ja skriptid üksteist välistavad meetodid. On võimalik kirjutada skripte, mis toetuvad käsurea utiliitidele ilma viimaste puudusteta.

Skriptimise host

Enne skripti loomisega jätkamist lubage mul selgitada mõningaid termineid. Teades, mis on peidus sõnade skriptimishost taga, on lihtsam mõista, kuidas see skriptiprojekti mõjutada võib, kas skriptis väljendite kasutamine on vastuvõetav jne.

Skriptimishost on skriptimise töökeskkond. Windowsil pole VBScriptist aimugi: kui sisestate käsureale rea VBScripti koodi, kuvab süsteem veateate. Kui Windows kohtab faili, mille laiend viitab skriptifailile, edastab operatsioonisüsteem faili tõlgendamiseks skriptimootorile. Masin tõlgendab pakutud skripti ja edastab seejärel skriptisõnumid (sisuliselt andmete logimise taotluse) operatsiooniruumi Windowsi süsteem hukkamiseks.

Windows toetab kahte skriptimismootorit: Microsofti Internet Explorer (IE) ja Windows Script Host (WSH). Konkreetse masina valik mõjutab stsenaariumis kasutatavaid võimalusi. Kui kasutatakse WSH-d, nagu enamasti, võib skript kasutada WSH-objekte, kuid mitte IE-d ja vastupidi. Skriptimootor ei pea mõistma iga mõeldava skripti sisu; Tajutakse ainult masina keeles kirjutatud skripti ja seda, mida see toetab. WSH ja IE jaoks on "loetavad" keeled VBScript ja JScript.

Skripti elemendid

Skripti iga rida on avaldus, mis ütleb arvutile, mida teha. Käivitatavad avaldused on tavaliselt “action-object” tüüpi: kirjeldatakse tegevust ennast ja objekti, millel toiming sooritatakse. Skript võib sisaldada tingimusi, mis nõuavad määratud lausete täitmist. Skripti host tõlgendab koodiridu vasakult paremale ja ülalt alla, nii et saate näiteks 10. real andmeid hankida ja neid real 30 kasutada. Erandiks on protseduurid. Protseduurid (funktsioonid ja alamprogrammid) on käskkirjade kogum, mida täidetakse ainult siis, kui seda selgesõnaliselt kutsutakse. IN sel juhul protseduur hakkab kohe täitma, olenemata sellest, kus koodis kõne tehti.

Skripti käivitatavaid osi nimetatakse lauseteks. Skripti mittekäivitavat osa nimetatakse kommentaariks ja sellele peab eelnema apostroof (") või märksõna Rem. Näiteks:

Rem See on kommentaar

"See on kommentaar

Kommentaar võib hõivata terve rea või olla osa reast, mis sisaldab käivitatav kood. Stsenaarium peaks olema dokumenteeritud, et keegi, kes pole selle kirjutamisega seotud (või isegi selle keele sõnavara ei tunne), saaks hõlpsasti aru, mida skripti eesmärk on teha. Mõnikord pannakse programmi silumise eesmärgil käivitatava rea ​​algusesse kommentaarimärk.

VBScript “mõistab” nelja andmetüüpi: numbrid; stringid; päev ja aeg; Boole'i ​​andmed. Numbrite näideteks on näiteks 2 või 9458. Stringid on mis tahes märkide kombinatsioon, mis on ümbritsetud jutumärkidega, näiteks "kala" ja "See on string %@#^>". Kuupäev ja kellaaeg peavad olema naela sümbolite (#) sees ja sellisena ilmuma. Näiteks #16. jaanuar 1968# ja #1/01/02 23:45 # on VBScripti vaatenurgast tavalised andmed. Boolean andmed – TRUE või FALSE, näiteks x

VBScript käsitleb nelja loetletud andmetüüpi teise andmetüübi, variandi alamhulgana, mis võib sisaldada mis tahes andmeid. Seega ei pea VBScript teile ütlema, millist tüüpi andmetega te töötate, kuid pidage meeles, et mõned toimingud tehakse Visual Basic(VB) ja VBScript kirjeldatud andmetüüpidega erineval viisil (kuigi sellist olukorda ei pruugi kunagi tekkida). Sama tüüpi andmerühmi nimetatakse massiivideks.

Andmetega töötamise hõlbustamiseks toetab VBScript veel kahte tüüpi andmeid, millel pole algväärtust (nullandmed), mida saab määrata skriptis muutujatele ja konstantidele. Muutujate väärtused võivad programmi täitmise ajal muutuda, kuid nende nimed jäävad samaks. Skripti käivitamisel on konstantidel ainult üks tähendus ja neid ei saa muuta.

Andmete skriptile edastamiseks on kaks võimalust. Esiteks on need programmi põhiosas selgesõnaliselt kirjas. Näiteks ""igserversharedfolder"" - tavakasutus stringi andmeskriptis tee näitamiseks. Teine võimalus on edastada sisendvoos soovitud andmed skriptile. Lisaks saab skript töötlemise edenedes ise andmeid genereerida (näiteks arvutada praegusest kaks nädalat hilisema kuupäeva) ja seejärel kasutada.

Saate andmetega manipuleerida, kasutades operaatoreid, sümboleid, mida tavaliselt kasutatakse matemaatiliste funktsioonide esitamiseks. Mõnel operaatoril on kõrgem prioriteet, mõnel madalam ja see mõjutab avaldiste hindamise järjekorda. Avaldis on arvutus, mis võib sisaldada numbreid, muutujaid, stringe ja konstante. Avaldistes saab kasutada operaatoreid. Näiteks avaldis dInputDate + 2 = dNewDate tähendab, et muutuja dInputDate väärtusele lisatakse 2 ja arvutuse tulemus omistatakse taas muutujale dNewDate.

Funktsioonid ja alamprogrammid

VBScriptil on sisseehitatud funktsioonide komplekt, mis võimaldab teil mõnda toimingut teha ilma Täpsem kirjeldus probleem lahendatakse. Sisseehitatud funktsioonide abil saate manipuleerida numbrite, stringide, kuupäeva ja kellaaja väärtuste ning massiividega. VBScript sisaldab ka funktsioone andmete teisendamiseks ühest andmetüübist teise. Näiteks eeldab VBScript tavaliselt, et arv, näiteks 45, on tüüpi "number", kuid seda saab vajadusel käsitleda stringi andmetüübina.

VBScript võimaldab teil konkreetsete ülesannete täitmiseks luua oma kasutaja määratud funktsioone (UDF). Näiteks:

Funktsioon TestFunct TestFunct = Sqr(9) + 2 Lõppfunktsioon

Kohandatud funktsioon TestFunct töötab ekstraktimiseks koos Sqri sisseehitatud funktsiooniga ruutjuur 9 ja tulemusele 2 lisamine UDF, nagu ka sisseehitatud funktsioon, võib võtta argumente.

TestFunct UDF tagastab tulemuse programmi põhiosale. Alamprogramm sooritab mõningaid toiminguid, kuid ei tagasta selle tulemusena põhikoodile midagi. Programmeerija võib alamprogrammi kasutada mitu korda, vajadusel kasutada sama koodilõiku, kuid ta on liiga laisk, et sama asja ikka ja jälle kirjutada. Alamprogramm

Sub AskUserName WScript.Echo _ ""Palun sisestage kasutajanimi."" WScript.Quit End Sub

kasutab WScript-objekti võimalusi mõne sõnumi kuvamiseks ekraanil ja seejärel väljub. Funktsioonid ja rutiinid võivad kasutada põhiskripti koodis deklareeritud muutujate väärtusi või kasutada oma muutujaid.

Objektid skriptis

Objekt kujutab endast arvutuskeskkonna füüsilist või loogilist osa, näiteks kettaseadet või konto nime. Muidugi saab programmeerida ka objekte kasutamata, kuid enamik juhtskripte töötab koos objektidega. Kui kasutatakse WSH-d, pääseb VBScript juurde WSH-i natiivsetele objektidele, nagu failid, kataloogid, registri osad; VBScript toetab ka Windowsi objektid Management Instrumentation (WMI) ja Active Directory teenuseliidesed (ADSI). WMI objektid on seotud füüsiliste ja loogiliste osadega arvutussüsteem: näiteks IP-aadressid, failisüsteemid, Võrguadapterid. ADSI objektid esindavad kataloogiteenuste ressursse: täpsemalt Active Directory (AD) või muud toetatud kataloogid, näiteks Windows NT 4.0 SAM. Sama laadi objektide staatilisi rühmi nimetatakse klassideks ja kasutaja määratud rühmi raamatukogudeks.

Objektidel on omadused ja meetodid. Objekti määravad selle omadused (st IP-aadress on võrgukaardi objekti omadus ja 12.4.21.197 on väärtus sellest kinnisvarast). Meetodid on toimingud, mida saab objektil teha (Kopeerimine on üks failiobjekti meetoditest). Kõigil objektidel pole meetodeid. Koodi kirjutamisel kasutatakse atribuute ja meetodeid samamoodi: kõigepealt tuleb objekt, seejärel punkt, seejärel meetodi või omaduse nimi (näiteks ObjektiNimi.OmaduseNimi). Objektid võivad sisaldada muid objekte. Eelkõige sisaldab WSH WScript-objekt alamobjekti WshArguments, mis on skriptifaili kutsumisel edastatud argumentide kogum. WScript.Arguments(0) kasutatakse argumendistringi esimese elemendi esiletõstmiseks. Nagu nägime WSH-objektide arutelus, ei ole alluvate objektide formaalne nimi sama, mis neile skriptis viidates kasutatakse.

Järgmisel korral räägin sellest, kuidas õpitut juhtimisstsenaariumide loomisel rakendada.

Krista Anderson on Windows NT Magazine'i vabakutseline kirjanik ja konsultant. Tema viimane raamat on Mastering Local Area Networks. Temaga saab ühendust võtta aadressil: [e-postiga kaitstud].

Järgmine artikkel annab täpsemaid näpunäiteid VBScriptis programmeerimise kohta, kuid praegu piirdume sellega üldreeglid millest tuleb alati kinni pidada:

  • Skripti read peaksid olema lühikesed: neid on lihtsam lugeda. VBScript võimaldab rea katkestamiseks kasutada alljoont ja If ...Then ... Else konstruktsioon aitab teil vabaneda hunnikust loogikast ühel real;
  • ära koonerda oma kommentaaridega. Nüüd mäletate ikka veel, miks seda koodirida vaja on. Aga kas sa mäletad seda kuue kuu pärast? Ja teine ​​inimene - kas ta mõistab ilma väljastpoolt abi kellegi teise koodis? Veenduge, et koodi loogika on kommentaarides täielikult lahti seletatud;
  • segage koodi kirjutamise juhtu. Muutujat oDiskSpace on lihtsam lugeda kui muutujat odiskspace või ODISKSPACE. VBScript on enamikul juhtudel tõstutundlik (ainsaks erandiks on ASCII-märgi väärtuse arvutamine);
  • Windows Script Hostiga (WSH) töötades peaksite kasutama käsureakeskkonda. WSH-d saab käivitada kahes keskkonnas – käsureakeskkonnas ja graafilises keskkonnas (vaikimisi). Esimesel juhul suunatakse väljund käsuaknasse, kui programmeerija just andmevoo ümber ei suuna. Graafilises keskkonnas saadetakse väljund sõnumikastidesse. Kõige sagedamini kasutatav keskkond on meeskonnakeskkond. Mõned toimingud graafilises keskkonnas ei tööta ja kui väljundit genereerib mitu koodirida, vajab igaüks neist oma sõnumikasti. Selle tulemusena peatub skript, kuni operaator klõpsab nuppu OK. Skripti käivitamiseks käsukeskkonnas peaksite kasutama ühte kahest meetodist: eelnege igale skriptikäsule cscripti kutse, näiteks: cscript getfree.vbs

    või määrake vaikekeskkonnaks käsureakeskkond:

    Wscript //h:cscript //s

  • Pange oma muutujatele nimed vastavalt esitatavate andmete tüübile (st stringi muutujate nimed peaksid algama tähega s, objektimuutujate nimed tähega o). Sarnane praktika aitab koodi silumisel. Mõnel juhul, kui andmetüübid ei ühti deklareeritud muutujatega, ei tööta skript ootuspäraselt. Ja kui andmetüüp on seotud muutuja nimega, tuvastatakse muutuja ja andmetüüpide mittevastavuse tõttu tekkinud vead kiiremini;
  • Kirjeldage muutujaid eelnevalt ja selgelt. Kuigi muutujaid saab deklareerida kaudselt (lihtsalt neile väärtusi omistades), saab nende kasutamise keelata. Selleks kasutage skriptifaili alguses käsku Option Explicit. Edaspidi peab iga programmikoodis kasutatav muutuja olema selgelt kirjeldatud operaatori Dim poolt, mis piirab kogemata või valesti sisestatud muutujatest tulenevate vigade arvu;
  • kirjutada skripte tekstiredaktoris. Ärge kasutage nendel eesmärkidel tekstitöötlus millele järgneb andmete salvestamine redaktorisse.

Skriptides kasutatakse sageli jutumärke ja kui tekstitöötlusprogramm need ühel või teisel viisil teisendab, siis skript lihtsalt ei tööta.

07.12.2006 Bill Stewart

Täiustage oma skripte Käsurea skriptid on failid lihttekstina, mida käsuprotsessor tõlgendab käskude komplektidena, mida täidetakse järjestikku. Käsurea skriptimise ajalugu pärineb aasta algusest

Täiustage oma skripte

Käsurea skriptid on lihtteksti failid, mida kest tõlgendab käskude komplektidena, mida tuleb järjestikku käivitada. Käsurea skriptimise ajalugu pärineb 1980. aastate koidikust – sellest ajast kuni tänapäevani toetab Command.com-i kest MSDOS-is skriptide täitmist lihtsate pakkfailide kaudu. 1993. aastal koos Windows NT-ga välja antud teine ​​käsuprotsessor Cmd.exe toetab samuti Command.com pakettfaili keelega sarnast makroprogrammeerimiskeelt. Vaatamata tehnoloogia kõrgele vanusele, kasutavad IT-spetsialistid Cmd.exe kestas makroprogrammeerimist endiselt laialdaselt. Näiteks võib lihtne skript käsuga For muuta käsu, mis töötab korraga ainult ühe arvuti või käsureal oleva kasutajaga, käsuks, mis liigub läbi teise tekstifaili ja käivitab selle faili iga rea ​​jaoks. Kuna käsurea skriptid on lihttekstifailid, mis esindavad käskude komplekti, on neid lihtne luua, redigeerida ja lugeda. Kuid makroprogrammeerimise lihtsus on petlik. Halvasti kirjutatud shelliskript võib põhjustada probleeme. Olen näinud, et arvutuskeskkonna ja operatsioonisüsteemi kohta tehtud valede eeldustega shelliskriptid töötavad parimal juhul valesti ja halvimal juhul teevad järsku süsteemides hävitavaid toiminguid. Et lugejad saaksid vältida sarnased probleemid, olen koostanud 10 näpunäidet jõulisemate skriptide loomiseks, mis võivad töötada paljudes andmetöötluskeskkondades.

Võimaluse korral kasutage keskkonnamuutujaid

Muutuja kasutamisel skriptis paneme muutuja nime protsendimärkide vahele (%) ja skripti täitmisel asendatakse protsendimärgid ja tekst nende vahel selle muutuja väärtusega. Muutujate kasutamine muudab skriptikoodi mitmekülgsemaks, seega on sellel paremad võimalused edukalt töötada. erinevad arvutid. Näiteks kestaskriptis ei tohiks te Windowsi installikataloogi kõvasti kodeerida. Selle asemel peaksite kasutama muutujat SystemRoot, mis osutab alati konkreetsele Windowsi installikataloogile. Jah, meeskond

Kaja %SystemRoot%

kuvab SystemRooti sisu (st Windowsi installikataloogi). Olen korduvalt näinud stsenaariume, kus C:WINDOWS kirjet kasutatakse Windowsi installikataloogile osutamiseks. Kui Windows pole C:WINDOWS-i installitud (näiteks Windows 2000 või uuem varased versioonid on seatud väärtusele WINNT), ei tööta skript õigesti. Keskkonnamuutujate loendi vaatamiseks sisestage käsureale käsk Set. Mõnda muutujat ei kuvata käsu Set loodud loendis, kuna need genereerib dünaamiliselt Cmd.exe. IN laud 1 kuvatakse nende muutujate loend. Nagu ka teiste keskkonnamuutujate puhul, on need muutujad ümbritsetud protsendimärkidega. Näiteks järgmine skriptirida näitaks praegust kellaaega ja kuupäeva:

Kaja %DATE% %TIME%

Te ei tohiks eeldada, et Command.com-i tavalised partiifailid töötavad Cmd.exe-s sama hästi

Need, kes on harjunud kirjutama pakettfaile MS-DOS-i või Windows 9x/Me platvormidele, peaksid teadma, et Windowsi uusimates versioonides pole mõnda käsku olemas. Kaks kõige levinumat näidet on käsud Choice ja Deltree. Vaadake oma vanad pakifailid üle ja veenduge, et need töötavad Cmd.exe kestas õigesti. IN laud 2 neid on mitu võimalikud asendused valiku ja Deltree jaoks. Enamikul asendustel on asendatavatest käskudest erinev süntaks, seega peate oma skripte vastavalt muutma.

Kasutage Cmd.exe kestas laiendit .cmd

Command.com pakettfailid nõuavad laiendit .bat. Cmd.exe kest võib kasutada ka laiendit .bat, kuid võimsamas makroprogrammeerimiskeeles Cmd.exe ei ühildu paljud käsud Command.com-iga. Seega võib Cmd.exe jaoks kirjutatud bat-fail kokku kukkuda, kui kasutaja proovib seda Command.com-is käivitada (näiteks Windows 98-s). Üks viis selle probleemi vältimiseks on kasutada skriptide jaoks laiendit .cmd. Kuna Command.com ei tunne .cmd laiendit ära, ei käivita see lihtsalt pakkfaili, kui selle nimi lõpeb .cmd-ga.

Veenduge, et vajalikud käivitatavad failid on saadaval

Kui teie skript hõlmab programme, mis ei kuulu standardse operatsioonisüsteemi installimisse, peate tagama, et kõik sellised programmid on saadaval. Need sõltuvused tuleks ka skriptides dokumenteerida. Käivitatavate failide kättesaadavuse tagamiseks soovitan paigutada need skriptiga samasse kataloogi. Siis on nende käitamiseks kasutatav süntaks

"%~dp0exename" ...

kus exename on käivitatava mooduli nimi, mida soovite käivitada. %~dp0 süntaks tagastab praeguse skripti draivi, tee ja failinime ilma jutumärkideta. Kogu stringi lisamine jutumärkidesse tagab, et skript töötab ka siis, kui faili või kataloogi nimi, milles skript asub, sisaldab jutumärke.

Kasutage topeltjutumärke õigesti

Näib, et topeltjutumärgid (") tekitavad stsenaariumi kirjutajates sageli segadust. Topeltjutumärgid on lihtsalt viis tühikuid sisaldavate käsureaargumentide tuvastamiseks. Näiteks näiliselt õige käsurida

kataloog C:Programmifailid

tegelikult annab käsule Dir kaks argumenti: C: Program ja Files. Et saavutada oma kavatsust edastada käsule üks C:Program Files argument (kaasa arvatud tühik), peame selle lisama jutumärkidesse:

dir "C:Program Files"

Jutumärgid ei ole kausta nime osa. Nad ütlevad Dir-käsule, et nendevaheline tekst on üks argument.

Shelliskriptid toetavad ka käsurea suvandeid. Skripti käsurea parameetrite kasutamiseks peate kasutama kirjet %n (kus n on arv vahemikus 0 kuni 9). Seda kirjet nimetatakse asendusparameetriks (või lihtsalt parameetriks). Näiteks asendab skript parameetri % 1 esimese käsurea argumendiga, % 2 teise argumendiga jne. Lisaks parameetritele %1 kuni %9 asendatakse %0 skripti nimega, %* asendatakse parameetriga %* kogu skripti käsurida (v.a skripti nimi) . Mainin siin käsurea suvandeid, sest kui Cmd.exe asendab suvandid %1 kuni %9 vastavate käsureaargumentidega, jätab see argumendis topeltjutumärgid välja. Ilmselge järeldus on, et skriptiparameetrit tsiteeritakse alati, kui see sisaldab tühikuid. Selle tähelepaneku põhjal on mõned lihtsad reeglid, mida hoolikalt järgides võivad jutumärgid peaaegu täielikult kõrvaldada.

  • Ärge kasutage skriptiparameetrite sees jutumärke (%1 kuni %9), kuna need võivad juba sisaldada jutumärke. Kui peate kasutama If-käsuga parameetrit, kasutage ärahoidmiseks muid märke peale jutumärkide (nt lokkis sulud). süntaksi viga. Järgmine rida töötab õigesti isegi siis, kui esimene parameeter (% 1) sisaldab jutumärke:

Kui (%1)==() Ava:HELP

Selle reegli erand on see, kui kasutame parameetrite jutumärkide eemaldamiseks süntaksit %~n (vt järgmist reeglit).

  • Ärge pange keskkonnamuutuja sisse jutumärke. Keskkonnamuutujates on tühikud lubatud ja jutumärke pole vaja. Kui peate parameetri muutujasse kopeerima, kasutage süntaksit %~n (kus n on arv vahemikus 1 kuni 9), mis tagastab parameetri ilma jutumärkideta. Näiteks joon

    Määra DATAFILE=% ~1
    kopeerib esimese skriptiparameetri (ilma jutumärkideta) muutujasse DATAFILE. Erandiks on see, kui loote tsiteeritud teksti, mis edastatakse teisele käsule.

  • Ärge unustage vajadusel asetada Keskkonnamuutujad jutumärkides. Näiteks kaaluge järgmisi skripti ridu:

    Määra TARGET=% ~2
    Kopeeri % 1 "%TARGET%"

Esimene neist ridadest kopeerib skripti teise argumendi muutujasse TARGET, eemaldades jutumärgid. Teine rida on süntaktiliselt õige, kuna %1 on juba jutumärgiga, kui see sisaldab tühikuid, ja muutujal TARGET peavad olema jutumärgid, kuna see võib sisaldada tühikuid.

Kasutage käske Setlocal ja Endlocal

Käsk Setlocal kopeerib kõik keskkonnamuutujad ja käsk Endlocal taastab kõik muutujad väärtustele, mis neil olid enne skripti käitamist. Endlocal eemaldab ka kõik skripti loodud muutujad. Mõlema käsu kasutamine muudab skripti isemajandavamaks ja tagab skripti "iseennast puhastamise", taastades keskkonnamuutujad nende algväärtustele ja eemaldades skripti loodud muutujad.

Võite kasutada ka käsku Setlocal Enableextensions, et tagada käsulaiendite lubamine. Käsulaiendid on rühma täiendused sisemised meeskonnad Cmd.exe (nt If, For, Call), mis pakuvad lisafunktsioone võrreldes Command.com-i samanimeliste käskudega. Käsulaiendid on vaikimisi lubatud, kuid harvadel juhtudel, kui need on keelatud, tagab käsk Setlocal Enableextensions, et käsulaiendid on lubatud. Käsulaiendite kohta lisateabe saamiseks sisestage rida Cmd /?.

Vajadusel kasutage Escape sümbolit

Cmd.exe kasutab reserveeritud kestamärkide eritähenduse tühistamiseks märki caret (^). Näiteks ampersand (&) on käsu eraldaja – see võimaldab panna samale reale mitu käsku. Kui kavatsete kasutada ampersandi tavalises, kirjanduslikus tähenduses, peate selle erilise tähenduse "tühistama", asetades selle ette tähise ^. Jah, rivis

Kaja Tegelane ^& on
käsu eraldaja

Märgi ^ tõttu alistab kest oma tavapärase tõlgenduse sellele järgneva märgi kohta. Erimärgid on märgid () ^ & |. Kui need märgid esinevad jutumärgiga stringis, pole paolipu kasutamine vajalik.

Ärge kasutage käsku Välju ilma lülitita /b

Ilma lülitita /b sulgeb käsk Exit praeguse käsukesta. Kui keegi käivitab faili Cmd.exe ja käivitab skripti, mis sisaldab käsku Exit, siis praegune shelliseanss suletakse järsult. Käsk Exit /b sulgeb praeguse skripti ilma praegust shelliseanssi sulgemata. Käsu Exit kohta lisateabe saamiseks tippige käsureale Exit /?.

Kasutage käsku If Errorlevel ettevaatlikult

Käsk If Errorlevel kontrollib viimase täitmise lõpetanud käsu väljumiskoodi. Skripti käitumine sõltub programmi väljumiskoodi kontrollimise tulemusest. Mõelge näiteks järgmisele stsenaariumile:

Minu programm
Kui veatase 1 Goto:ERROR

Nende ridade käsk Goto käivitatakse ainult siis, kui Myprogram.exe tagastab väljumiskoodi, mis on suurem kui 1 või sellega võrdne. Teisisõnu, "Kui veatase n" ei tähenda "kui programmi viimane väljumiskood on täpselt n"; see tingimus tähendab tegelikult "kui programmi viimane väljumiskood ei ole väiksem kui n". Seda käitumist arvestades peaksite kontrollima programmi väljumiskoodi kahanevas järjekorras (suurimast väikseimani). Konkreetse programmi väljumiskoodi väärtuse kontrollimiseks kasutage käsu If Errorlevel asemel dünaamilist muutujat ERRORLEVEL. Tuleb meeles pidada, et käsk If Errorlevel erineb tabelis loetletud muutujast ERRORLEVEL. 1. Käsk If Errorlevel on tagasiühilduv Command.com-i käsuga If Errorlevel; Muutuja ERRORLEVEL on saadaval ainult failis Cmd.exe.

Mõelge käsu Start funktsioonidele

Käsk Start käivitab programmi või käsu uues konsooliaknas. Kui aga proovite käivitada programmi kaustast, mis sisaldab tühikuid (või kui programmi nimi sisaldab tühikuid), ei pruugi käsk Start käituda ootuspäraselt. Näiteks järgmine käsk:

Käivitage "C: Program FilesMicrosoft
OfficeOffice11Winword.exe"

Microsoft Word ei käivitu ootuspäraselt. Selle asemel avab käsk Start uue Cmd.exe seansi, mille konsooliakna pealkiri on tsiteeritud string. See on tingitud sellest, et käsk Start kasutab konsooliakna pealkirjana oma käsureal esimest tsiteeritud stringi.

Sellest mööda saamiseks kasutage tühja pealkirja märkimiseks jutumärkide paari ja sisestage seejärel käivitatava programmi rida. Õige Käivitage programm näeb välja umbes selline:

Käivitage "" "C:Program FilesMicrosoft
OfficeOffice11Winword.exe"

Sa ei saa kõike ette näha

Cmd.exe kestaskripte kasutatakse laialdaselt. Kui olete selle artikli näpunäiteid omandanud, saate luua usaldusväärsemaid skripte ja vältida levinud probleeme.

Saate käivitada skripti käsurealt, kasutades WSH cscript.exe konsooliversiooni. Näiteks faili C:\Script\First.js kirjutatud skripti käivitamiseks peate laadima käsuakna ja käivitama selles oleva käsu

cscript C:\Script\First.js

Selle skripti täitmise tulemusena kuvatakse käsuaknas rida "Tere!" riis. 4.1)

suurenda pilti Riis. 4.1. First.js konsoolirežiimis käitamise tulemus (cscript.exe)

Skripti käivitamine käsurealt graafilises režiimis

Skripti saab käivitada käsurealt, kasutades WSH wscript.exe (aknaga) graafilist versiooni. Meie näite puhul peate sel juhul käivitama käsu

wscript C:\Script\First.js

Seejärel ilmub skripti täitmise tulemusena ekraanile vajalik dialoogiboks ( riis. 4.2).

suurenda pilti Riis. 4.2. First.js graafilises režiimis (wscript.exe) käivitamise tulemus

Seega näeme, et kui skripti käitatakse konsoolirežiimis, väljastatakse tekstiteave standardsesse väljundvoogu (ekraanil), kui see käivitatakse. graafiline režiim- dialoogiboksis.

Skripti käivitamine menüüst Start

Skripti käivitamiseks menüü Start üksuse Käivita abil lihtsalt kirjutage täisnimi see skript väljale Ava ja klõpsake nuppu OK. Sel juhul käivitatakse skript vaikimisi faili wscript.exe abil, st teave väljastatakse graafilisse dialoogiboksi.

Skripti käivitamine Windows Exploreri abil

Lihtsaim viis on käivitada skript Windows Exploreri akendes või töölaual – lihtsalt topeltklõpsake faili nimel koos skriptiga või selle ikoonil (sarnaselt mis tahes muu käivitatava failiga). Sel juhul, nagu ka käivitamise puhul menüü Start abil, käivitatakse vaikeskript, kasutades faili wscript.exe.

Skripti omaduste seadistamine ja muutmine

Vajadusel saate määrata skriptidele erinevaid parameetreid, mis mõjutavad nende täitmist. Skriptiserveri konsooli (cscript.exe) ja graafilise (wscript.exe) versiooni puhul on need parameetrid määratud erinevalt.

Kui skripti käitatakse konsoolirežiimis, juhitakse selle täitmist cscript.exe käsurea parameetrite abil (vt. laud 4.1), mis lubavad või keelavad erinevaid WSH-suvandeid (kõik need valikud algavad tähemärkidega "//").

Tabel 4.1. Cscript.exe käsurea valikud

Parameetri kirjeldus

Keelab pakettrežiimi (vaikimisi). Sel juhul kuvatakse ekraanil kõik skripti veateated.

Lubab pakettrežiimi. Sel juhul ei kuvata ekraanil ühtegi teadet.

Määrab ajalõpu sekundites, st skript töötab nn sekundit enne protsessi lõpetamist. Vaikimisi on täitmisaeg piiramatu

Prindib (vaikimisi) WSH versiooni ja arendajateabe enne skripti käivitamist

Suletab WSH versiooni ja arendajateabe.

//H:CScipt või //H:Wscript

Muudab cscript.exe või wscript.exe skriptide käitamise vaikerakenduseks. Kui neid parameetreid pole määratud, eeldatakse vaikimisi wscript.exe-d

Salvestab praeguse kasutaja käsurea sätted

Kuvab käsurea valikute tekstisisest abi

Käivitab skripti, kasutades mootori parameetriga määratud moodulit

Sisaldab silurit

Käivitab programmi siluris

//Töö:

Käivitab mitme ülesandega WS-failist töö indeksiga JobID (WS-failide struktuuri kirjeldatakse allpool)

Võimaldab kasutada Unicode'i kodeeringut konsoolist sisendi/väljundi ümbersuunamisel

Näiteks käsk

cscript //Nologo C:\Script\First.js

käivitab skripti First.js ilma WSH versiooni teabeta.

Skripti saab käivitada käsurea parameetritega, mis on määratud pärast skripti nime (selliste parameetrite töötlemise protseduuri kirjeldatakse allpool, kui vaadata objekte WshArguments, WshNamed ja WshUnnamed). Näiteks käsk

cscript //B C:\Script\First.js /a /b

käivitab skripti First.js pakkrežiimis, kus /a ja /b on selle skripti parameetrid ning //B on rakenduse cscript.exe parameeter.

Kui skripti käitatakse graafilises režiimis (kasutades wscript.exe), saab skripti atribuute määrata Windowsi failiatribuutide dialoogiboksi vahekaardil Skript (Skript). riis. 4.3).

Riis. 4.3. Skripti First.js atribuutide määramine

Pärast skripti atribuutide seadistamist luuakse selle skripti nime ja wsh-laiendiga automaatselt fail, mille struktuur sarnaneb ini-failile, näiteks:

Path=C:\Script\First.js

Kui teete topeltklõpsu Windows Explorer wsh-faili või käivitage selline fail käsurealt, siis käivitab vastav skriptiserver (wscript.exe või cscript.exe) jaotises Valikud määratud parameetritega skripti, millele wsh-fail vastab.

Kui käitate skripte faili wscript.exe abil, saate skripti käsurea parameetrite määramiseks kasutada pukseerimistehnoloogiat – kui valite Windows Exploreris mitu faili ja lohistate need skripti otseteele, käivitub skript ja skripti nimed. valitud failid edastatakse sellele parameetritena.

Kategooria ~ Tehnilised näpunäited – Igor (administraator)

Kas olete kunagi tahtnud käivitada programmi või skripti, kui teie arvuti lülitub välja või kui kasutaja logib välja? Päeva lõpus kutsuge ajutiste failide puhastamiseks programm või käivitage regulaarselt kasutatavate failide varukoopia. Hoolimata asjaolust, et programmide automaatne käivitamine Windowsi käivitumisel on üsna lihtne, pole programmide väljalülitamisel käivitamise seadistamine nii ilmne. Vähesed kasutajad teavad sellest, kuid paljudel Windowsi versioonidel on sisseehitatud tööriist, mis muudab selle üsna lihtsaks.

Windowsi kohaliku rühmapoliitika redaktor

Trikk on kasutada Windowsi süsteemitööriista nimega Local Group Policy Editor (GPE). Kahjuks on Microsoft GPE kõigist välja jätnud Kodused versioonid, seega on see meetod rakendatav ainult selliste versioonide puhul nagu Professional ja Enterprise. Meetod sobib Windows XP ja uuemate versioonide jaoks. Võib-olla olete GPE-ga juba tuttav, sest seda tööriista esindab komplekti mugavad funktsioonid. Kuid isegi sel juhul teavad vähesed inimesed skriptide ja programmide käivitamise võimalusest.

Märge: Alternatiivina saab alati kasutada vbs-skripte või pakkfaile, mille väljakutse lõppeb konsooli käsu käivitamisega arvuti sulgemiseks.

GPE on üks süsteemi moodulid Windows, tuntud kui Microsofti halduskonsool või lisandmoodul. Kuigi mõnda neist saab käivitada Windowsi juhtpaneelilt, ei leia neid programmiloenditest. Pange tähele, et lisandmoodulite käitamiseks vajate administraatori õigusi.

Käivitage skript või programm, kui Windows lülitub välja


Käivitage skript või programm, kui kasutaja logib Windowsist välja

Kui peate programmi või skripti käivitama ainult siis, kui kasutaja välja logib, peate GPE lisandmoodulis kasutama mõnda muud üksust. Juhised ise jäävad täpselt samaks. Ainus asi, mida peate sammus 3 tegema, on vahekaardi "Arvuti konfiguratsioon" asemel avada vahekaart "Kasutaja konfiguratsioon". Ja sammus 4 topeltklõpsake käsul „Logi välja”, mitte „Sulge”

Märge: See artikkel on peamiselt mõeldud kogenud kasutajad. Lisateavet GPE kasutamise ja ajastamise kohta leiate Microsofti veebisaidilt siit.

Nüüd teate, kuidas käivitada käivitatav fail juures Windowsi väljalülitamine ja kui kasutaja logib välja.