Post on 02-May-2015
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: 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)}
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
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
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
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%
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
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()
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")
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
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!")
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()
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
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") )
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;"
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
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")
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")
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)
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")
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:")
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
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()
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
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
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.
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
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()
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
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
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