31
Alessandro Marchisio - gennaio 2005 Window Scripting Host • Contenitore per eseguire script in vb o js come semplici file batch (file .js e .vbs) • Stesse potenzialità degli activeX • Può essere eseguito da una finestra di windows (Wscript.exe) o da riga di comando (Cscript.exe) • L’estensione js o vbs richiama il corretto interprete

Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Embed Size (px)

Citation preview

Page 1: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Window Scripting Host

• Contenitore per eseguire script in vb o js come semplici file batch (file .js e .vbs)

• Stesse potenzialità degli activeX• Può essere eseguito da una finestra

di windows (Wscript.exe) o da riga di comando (Cscript.exe)

• L’estensione js o vbs richiama il corretto interprete

Page 2: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Window Scripting Host: js

• Sintassi javascript• Metodi e funzioni devono essere chiamati con

()• Per iterare su collezioni utilizzare un'istanza

dell'oggetto Enumerator( collezione ) con i metodi moveFirst(), MoveNext(), item() e AtEnd()

• Ricordarsi che il caratere "\" deve essere scritto "\\"function ShowFolders() {

fso = WScript.CreateObject("Scripting.FileSystemObject");e = new Enumerator( fso.getFolder("c:\\").subFolders );for (; !e.atEnd(); e.moveNext())WScript.stdOut.writeline( e.item().Name)}

Page 3: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WSH: oggetti predefiniti

• WScript è la base o metodo createObject( nomeoggetto )

può creare oggetti come WShell e Network

• WshShello gestione chiavi registri,o msg popupo esegue programmi

• WshNetworko accedere a dischi e stampanti di rete

Page 4: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wscript.echo

• WScript.echo(“stringa da visualizzare”)o se lo script è runnato da riga di comando

produce una rigao se è richiamato con wscript produce una

finestra di dialogo

Page 5: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WScript.sleep()

• WScript.sleep( tempoMsec )o blocca l’esecuzione del programma o tempoMsec è il tempo espresso in

millisecondi• WScript.timeout = temposec

o termina in qualsiasi caso il programma dopo temposec secondi

Page 6: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WScript.quit()

• WScript.quit( )o termina l’esecuzione del programmao è possibile inserire un numero come

argomento del metodoo Tale numero sarà restituito alla variabile

d’ambiente %errorlevel%

Page 7: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WScript.stdOut

• Write( stringa )• writeLine( stringaACapo )• writeBlankLines( numRigheVuote )

• writeLn() è simile a echo;• E’ possibile andare a capo utilizzando

“\n”

Quest’oggetto è disponibile solo da riga di comando

Page 8: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WScript.stdIn

• read( num caratteri )• readLine() //fino a ENTER• readAll() //utilizzato con cmd batch WScript.stdOut.writeBlankLines(5)WScript.stdOut.write("Come ti chiami? ")nome = WScript.stdIn.readLine()WScript.stdOut.writeLine("\nHai inserito: " + nome)

• skip( num caratteri ) //tralascia • skipLine()• atEndOfFile() atEndOfStream()

Page 9: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WSH environment (ambiente)

• ScriptFullName• ScriptName• Version• Build• Name• FullName• Path

if (WScript.FullName.indexOf("wscript") != -1)WScript.echo("sto girando da wscript")elseWScript.echo("sto girando da cscript")

Page 10: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

WHS parametrida riga di comando

• WScript.argumentso è la collezione che indica i parametri

passati da riga di comando

o WScript.arguments.lengthindica il numero dei parametri

o WScript.arguments.item( i )accede all’ i-esimo elemento Gli item si contano sempre a partire da 0 a collezione.length-1

Page 11: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Collezione Named

• È utilizzata per un semplice parsing di una stringa tipo: (obbligatorio slash e due pti)

/sw1:valore /sw2:valore ecc.

param = WScript.arguments.named

if ( param.exists("velocita") )WScript.echo("Velocita: " + param.item("velocita"))elseWScript.echo("parametro velocita non inserito!")

Page 12: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: CreateShortcut

• Wshell è un oggetto figlio di WScript• createShortcut è un metodo di un oggetto

di classe Wshell che permette la creazione di collegamenti.

// creazione istanza di oggetto shellWS = WScript.createObject("WScript.Shell")DesktopFolder = WS.specialFolders("SendTo")pathFileColleg = DesktopFolder + "\\Calcolatrice.lnk"

//Creazione collegamentocollegamento = WS.createShortcut(pathFileColleg) //Arguments,Description,FullName,Hotkey,IconLocation,//TargetPath,windowStyle,workingDirectory (proprietà)collegamento.targetPath = “c:\winnt\system32\calc.exe”collegamento.HotKey = "Ctrl+Shift+c"collegamento.save()

Page 13: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell:Esecuzione eseguibili

• Oggetto shell:objShell = WScript.CreateObject("Wscript.Shell")programma= ”winver.exe”modFinestra = 3aspettaFine = falseobjShell.run(programma,modFinestra,aspettaFine)

modalità finestra puo avere valori da 0 a 10 (massimizzata, minimizzata, con fuoco senza fuoco,ecc.)Il terzo parametro indica se l’esecuzione dello script deve aspettare la terminazione del programma lanciato o se debba proseguire in modo sincrono

Page 14: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: specialFolder

• Metodo che trasforma un percorso "logico" in uno assoluto

• percorsi logici: o AllUsersDesktop, AllUsersStartMenu,

AllUsersPrograms, AllUsersStartupo Desktop, Favorites, Fonts,

MyDocuments, NetHood, PrintHood, Recent, SendTo

o StartMenu, Startup, Templates

WSh = WScript.createObject("WScript.Shell")WScript.stdOut.write( WSh.specialFolders("MyDocuments") )

Page 15: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: variabili %ambiente%

• 4 ambienti: USER, SYSTEM, VOLATILE, PROCESS

• shell.Environment("ambiente") restituisce una collezione di variabili

• La collezione Process contiene tutte le variabili d'ambiente per il processo

• Shell.ExpandEnvironmentStrings("stringa con %var%")

WSh = WScript.createObject("WScript.Shell")ambiente = WSh.Environment("System")WScript.stdOut.write( ambiente("path") )ambiente("path") += ";c:\\wsh;"

Page 16: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: Gestione Registri

• shell.RegRead("entry") • shell.RegWrite("entry", valore, "tipo")

key = "HKLM\\Software\\Microsoft\\"key += "Windows NT\\CurrentVersion\\CurrentVersion"sh = WScript.createObject("WScript.Shell")WScript.stdOut.writeLine( sh.regRead(key) )

key = "HKLM\\Software\\Microsoft\\"key += "Windows NT\\CurrentVersion\\RegisteredOwner"sh.regWrite(key,"Nuovo proprietario","REG_SZ")

HKEY_CURRENT_USER= HKCUHKEY_LOCAL_MACHINE= HKLMHKEY_CLASSES_ROOT=HKCR

Page 17: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: Visualizzatore Eventi

• shell.logEvent( tipo,"descrizione") • Scrive eventi di tipo applicazione.

Tipo: 0=Success 1=Error 2=Warning 4=Information 8=AuditSucces

16=AuditFailureobjShell = WScript.CreateObject("Wscript.Shell")objShell.LogEvent( 0,"Test Success Event")objShell.LogEvent( 1,"Test Error Event")objShell.LogEvent( 2,"Test Warning Event")objShell.LogEvent( 4, "Test Information Event")objShell.LogEvent( 8, "Test Success Audit Event")objShell.LogEvent( 16, "Test Failure Audit Event")

Page 18: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: SendKeys

• shell.sendkeys( stringa ) • L'applicazione deve avere il fuoco• E' possibile inviare combinazioni di

tasti• ALT: % CTRL: ^ Shift: +• {UP} {HOME} {BS}…{F1} INVIO: ~• shell.appActivate("titoloFinestra")

WScript.timeout = 4sh = WScript.CreateObject("WScript.Shell")sh.Run("Notepad.exe")for (ok = 0; !ok; )ok = sh.appActivate("Blocco note")sh.sendKeys("Ciao~Ciao%fs")

Page 19: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: currentDirectory

• shell.currentDirectory• Accessibile in lettura e in scrittura• Cambia la directory per la durata del

processo

sh = WScript.CreateObject("WScript.Shell")out = WScript.stdOutout.writeLine("Directory di partenza: " + sh.currentDirectory)sh.currentDirectory = "I:\\"out.writeLine("Directory attuale: " + sh.currentDirectory)

Page 20: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Wshell: popup

• WScript.echo("stringa") non è configurabile

• shell.popUp("stringa",timeout, titolo, icone+pulsanti )

• Icone: stop(16) ? (32) ! (48) i (64)• Pulsanti: Ok (0), Ok/Canc (1),

Yes/No(4) Abort/Retry/Ignore(2), Yes/No/Cancel (3)retry/cancel (5) sh = WScript.CreateObject("WScript.Shell")

out = WScript.stdOutsh.popup("Tra poco scompare\nAffrettati a rispondere",5,"Esempio",48 + 4)out.writeLine("Programma terminato")

Page 21: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Network Drive

• mapNetworkDrive(localName,RemoteName, updateProfile, username, password)

• removeNetworkDrive( localName, flagSave, flagProfile )

• EnumNetworkDrives() restituisce una collezione con localName, remoteName

nwk = WScript.CreateObject("WScript.Network")nwk.mapNetworkDrive("X:", "\\\\lucag\\download",0)Drives = nwk.EnumNetworkDrives()for( i = 0; i < Drives.length; i+=2)WScript.Echo( Drives.Item(i) + "\t" + Drives.Item(i+1) )nwk.removeNetworkDrive("X:")

Page 22: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Network Printers

• AddWindowsPrinterConnection(Risorsa Unc) AddPrinterConnection(localPort, RisorsaUnc)

• removePrinterConnection(RisorsaUnc, flagforced, flagProfile )

• EnumPrinterConnections() restituisce una collezione con localName/port e UNCprinter

• SetDefaultPrinter(Risorsa Unc)nwk = WScript.CreateObject("WScript.Network")nwk.addPrinterConnection("LPT1:","\\\\marco\\hp2300")//equivale a net use LPT1: \\marco\hp2300

Page 23: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Network properties

• CompterName• UserDomain• Username

sola letturamaggiori informazioni di possono

ottenere con il protocollo LDAP su ADSI

function whoami() {var nwk = WScript.CreateObject("WScript.Network")var out = WScript.stdOut out.writeLine("ComputerName:" + nwk.computerName)out.writeLine("Userdomain:" + nwk.userDomain)out.writeLine("UserName:" + nwk.userName)}whoami()

Page 24: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: Drives• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• collDrives= objFSO.Drives• DriveObj = objFSO.GetDrive("c:")• DriveObj ha le seguenti proprietà:AvailableSpace, DriveLetter, FileSystem, IsReady, Path, RootFolder, SerialNumber,ShareName, TotalSize, VolumeName, DriveType

Page 25: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: Folder• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• objFold = objFSO.getFolder(path)• objFold ha le seguenti proprietà: DateCreated, DateLastAccessed, DateLastModified, Drive, IsRootFolder, Name, ParentFolder, Path, ShortName, ShortPath, Size, Type

• objFold ha due collezioni: Files e SubFolders

Page 26: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: Folder• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• objFSO.CreateFolder(pathNewFolder)o se esiste già da errore

• objFSO.DeleteFolder(pathNewFolder)• objFSO.CopyFolder(pathSourceFolder

, pathDestFolder,flagOverWrite) - xcopy /x

• objFSO.MoveFolder(pathSourceFolder, pathDestFolder)o serve anche per rinominare cartelle.

Page 27: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: File• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• FileObj = objFSO.GetFile(pathFile)• flag = objFSO.FileExists(pathFile)• FileObj.Attributes

1=ReadOnly 2=Hidden 4=System 32=Archive 64=Link 2048=Compresso

• Metodi: GetAbsolutePathName, GetParentFolderName, GetFileName, GetBaseName, GetExtensionName, GetFileVersion

Page 28: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: Writing File• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• FileObj = objFSO.OpenTextFile(pathFile, writeAppend, Scrivi, fmt) write=2 Append=8scriviFlag=true, crea se non esiste, 0ascii/-1Unicode

• FileObj.write("stringa") • FileObj.writeLine("stringa") • FileObj.writeBlankLines(num) • FileObj.close()

Page 29: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

File System Object: Reading File• objFSO = WScript.CreateObject("Scripting.FileSystemObject")

• Legge solo file Ascii e solo dall'inizio alla fine• Un file aperto in lettura non può essere

scritto• Problemi leggendo un file di lunghezza 0,

meglio controllare la proprietà size• FileObj =

objFSO.OpenTextFile(pathNameFile,1)• FileObj. Read(numCar) .readline() .readAll()

skip(), skipLine()• AtEndOfStream

Page 30: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

wshController • Permette di eseguire script locali su

una macchina remoto• createScript(percorsoScript,

computer)• Lo script creato ha metodi execute e

proprietà status (0=run,1=runnig,2=end)

• Questi script non devono essere interattivi

• Metodo ConnectObject(oggetto, "nome") richiama nome_start, nome_error, nome_end

Page 31: Alessandro Marchisio - gennaio 2005 Window Scripting Host Contenitore per eseguire script in vb o js come semplici file batch (file.js e.vbs) Stesse potenzialità

Alessandro Marchisio - gennaio 2005

Script sicuri• HKEY_LOCAL_MACHINE\Software\

Microsoft\Windows Script Host\Settings\TrustPolicyo 0: tutti gli script possono essere eseguitio 1: messaggio di warningo 2: solo script "signed"

SignObj=WScript.CreateObject("Scripting.Signer") SignObj.SignFile( nomeFile, nomeCertificato )SignObj.verifyFile( nomeFile, flagShowWarning ) //true-false