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
• WshShell
o
o
o
gestione chiavi registri,
msg popup
esegue programmi
o
accedere a dischi e stampanti di rete
• WshNetwork
Alessandro Marchisio - gennaio 2005
Wscript.echo
• WScript.echo(“stringa da visualizzare”)
se lo script è runnato da riga di comando
produce una riga
o se è richiamato con wscript produce una
finestra di dialogo
o
Alessandro Marchisio - gennaio 2005
WScript.sleep()
• WScript.sleep( tempoMsec )
o
o
blocca l’esecuzione del programma
tempoMsec è il tempo espresso in millisecondi
o
termina in qualsiasi caso il programma dopo
temposec secondi
• WScript.timeout = temposec
Alessandro Marchisio - gennaio 2005
WScript.quit()
• WScript.quit( )
termina l’esecuzione del programma
è possibile inserire un numero come
argomento del metodo
o Tale numero sarà restituito alla variabile
d’ambiente %errorlevel%
o
o
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")
else
WScript.echo("sto girando da cscript")
Alessandro Marchisio - gennaio 2005
WHS parametri
da riga di comando
• WScript.arguments
o
è la collezione che indica i parametri passati
da riga di comando
WScript.arguments.length
indica 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
o
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"))
else
WScript.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 shell
WS = WScript.createObject("WScript.Shell")
DesktopFolder = WS.specialFolders("SendTo")
pathFileColleg = DesktopFolder + "\\Calcolatrice.lnk"
//Creazione collegamento
collegamento = 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 = 3
aspettaFine = false
objShell.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, AllUsersStartup
o 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= HKCU
HKEY_LOCAL_MACHINE= HKLM
HKEY_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=AuditFailure
objShell = 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 = 4
sh = 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.stdOut
out.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.stdOut
sh.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 lettura
maggiori 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=8
scriviFlag=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\TrustPolicy
o
o
o
0: tutti gli script possono essere eseguiti
1: messaggio di warning
2: solo script "signed"
SignObj=WScript.CreateObject("Scripting.Signer")
SignObj.SignFile( nomeFile, nomeCertificato )
SignObj.verifyFile( nomeFile, flagShowWarning ) //true-false
Scarica

Document