Introduzione al Windows Scripting Host (2) |
| A cura di Davide Bianchi |
Questo e' il secondo di una serie di articoli, lo scopo e'
sviscerare l'utilizzo del Windows Scripting Host, cosa e' ed a
cosa serve.
|
|
Breve riassunto delle puntate precedenti
|
Nell'articolo precedente abbiamo visto come e perche' si e'
arrivati alla definizione di un (veramente due) linguaggio di
Scripting per Windows, perche' questo linguaggio sia
importante ed a che cosa serva. In questo articolo vedremo come mettere giu' effettivamente qualche script e come gli script vengono gestiti.
Attenzione:
|
|
|
Due linguaggi per uno script
|
Quando alla Microsoft si misero a lavorare al WSH si trovarono di
fronte un piccolo problema: l'intenzione iniziale era di "spogliare"
Visual Basic di tutti i fronzoli grafici e lasciare il solo motore
nudo e crudo, quindi di implementare a tutti gli effetti un interprete
di codice Visual Basic privo delle capacita' grafiche e di
interfaccia di quest'ultimo, nello stesso tempo pero', stavano
lavorando al motore JavaScript di Internet Explorer, che era gia'
un interprete nudo e crudo. Quello che ci troviamo attualmente e' un prodotto che e' in grado di gestirli entrambi, in sostanza possiamo scegliere se utilizzare un linguaggio simile a Visual Basic o preferiamo qualche cosa di piu' simile al Java per definire i nostri script. Quali differenze ci sono? Effettivamente poche, per lo piu' sono differenze estetiche:
Nel corso di questi articoli si utilizzeranno entrambi i linguaggi.
|
|
|
La struttura di uno script
|
Uno Script e' composto da un file ASCII, quindi realizzato con un
qualunque editor che sia in grado di produrre un file (anche il buon
vecchio Blocco Notes di Windows va' benissimo), con estensione
.VBS
o
.JS
a seconda che si stia usando VBScript o
JScript, che contenga dei comandi VBScript o JScript validi.
Niente di piu'. Per eseguire uno script (oltre ad aver installato il "motore") non dobbiamo fare altro che fare doppio click sull'icona dello script stesso. Il "motore" si occupera' di leggere lo script ed eseguirlo. Attenzione: all'interno dello script non c'e' niente che specifichi se lo script deve essere interpretato come VBScript o JScript, solo l'estensione del file lo identifica, quindi se mettiamo dei comandi VBScript dentro un file con estensione .JS il "motore" ci segnalera' un sacco di errori anche se i comandi sono sintatticamente corretti. Il WSH inizia ad interpretare lo script dalla prima linea di codice che trova che non sia dentro una funzione o procedura, e procede una linea alla volta all'interno dello script fino ad arrivare in fondo. A questo punto si interrompe. Non c'e' nessun bisogno quindi di funzioni o procedure particolari che siano eseguite, il WSH non cerca ne' "main" ne' altro. Semplicemente cerca una istruzione eseguibile. In tutti i linguaggi di programmazione si comincia scrivendo un programmino che scrive "Ciao Mondo", noi non facciamo differenza. Il programmino in questione e' il seguente: MsgBox "Ciao Mondo"Scriviamo questa semplicissima riga dentro un file, chiamiamo questo file ciao.vbs ed eseguiamolo facendoci sopra doppio click. Il risultato sara' la comparsa di una finestrella con sopra scritto "Ciao Mondo", esattamente come atteso. Abbiamo appena imparato come visualizzare un messaggio in VBScript.
|
|
|
Messaggi e richieste
|
Il passo successivo, di solito, e' quello di richiedere il nome
dell'utente e di visualizzare un messaggio che dice "sei uno scemo".
Per realizzare questa meraviglia della tecnologia moderna abbiamo
bisogno di domandare qualche cosa all'utente e di memorizzare quello
che l'utente ci dice da qualche parte. Per fare domande all'utente abbiamo la funzione InputBox, mentre per memorizzare i dati abbiamo le variabili. Le variabili in VBScript si dichiarano con l'istruzione Dim, tutte le variabili di Script sono di tipo variant, cioe' sono prive di un tipo fisso e possono essere convertite da un tipo all'altro senza problemi. Nella stessa variabile possiamo memorizzare stringhe, caratteri, numeri ed altro senza preoccuparci troppo. Lo script completo che esegue la nostra operazione e' il seguente:
Dim nomeUtente
nomeUtente = InputBox("Immettere il proprio nome")
MsgBox nomeUtente & " sei uno scemo"
La linea bianca tra il Dim ed il resto e' solo per staccare le due
parti e rendere piu' comprensibile il codice.A questo punto possiamo fare qualche considerazione "generale":
Nel nostro esempietto di poc'anzi, InputBox e' una funzione ed e' seguita da un parametro tra parentesi (perche e' una funzione), la MsgBox e' una procedura che non ritorna nessun valore, ed il suo parametro (il testo da visualizzare) e' indicato senza nessuna parentesi.
|
|
|
Eseguire dei calcoli
|
I calcoli di solito si fanno su delle variabili, qui' occorre fare un
po' di attenzione perche', come detto prima, le variabili sono tutte
variant, quindi il WSH scegliera' il tipo della variabile in
funzione di quello che gli fa piu' comodo. Questo potrebbe portare ad alcuni problemi quando abbiamo a che fare con numeri interi e numeri decimali, in quanto il WSH potrebbe decidere che tutti i numeri sono interi e perdersi per la strada un po' di decimali. Se e' il caso e' opportuno "forzare" WSH a considerare i numeri decimali indicandoli sempre con il punto decimale anche se sono interi (1.0 invece di 1). WSH implementa tutti i normali calcoli matematici (+ - * /) piu' le principali funzioni SIN, COS, ATN, LOG, SQRT (SQuare RooT = Radice quadrata), conversione in valore assoluto (ABS) e le funzioni di conversione tra i vari numeri: INT per convertire un numero in intero, Round per arrotondarlo.
|
|
|
Cicli e controlli
|
Fino ad ora abbiamo visto come il WSH esegua le istruzioni una dopo
l'altra, ovviamente non sempre vogliamo che lui esegua le cose in
sequenza, di tanto in tanto ci occorre che vengano eseguiti dei
cicli o che vengano valutate delle condizioni ed in base a
questo si faccia qualche cosa. WSH implementa tutti i principali meccanismi di controllo dell'esecuzione:
Dim frase
Dim lettera
Dim contatore
Dim fraseInversa
Do
frase = InputBox("Immettere una frase di almeno 10 caratteri")
Loop Until Len( frase ) > 10
fraseInversa = ""
For contatore = Len( frase ) To 1 Step -1
lettera = Mid( frase, contatore, 1 )
fraseInversa = fraseInversa & lettera
Next
MsgBox fraseInversa
|
|
|
Funzioni e procedure
|
WSH consente di creare Funzioni e Procedure, queste
permettono di strutturare uno script in modo molto sofisticato,
e di riutilizzare parti di uno script in altri script con molta
facilita'. La differenza fondamentale tra una Funzione ed una Procedura e' che la prima ritorna un valore, mentre la seconda no. Per definire una Procedura si utilizzano le istruzioni: Sub nome_procedura( [ variabile [, variabile ] ) corpo della procedura... End Sub In cui nome_procedura e' un nome univoco che identifica la procedura stessa. Per "richiamare" la procedura basta indicare nome_procedura nel corpo dello script, il WSH richiamera' la procedura stessa. se necessario occorre aggiungere al nome i parametri necessari. Per esempio, MsgBox e' una procedura, nei nostri esempi abbiamo sempre usato per richiamarla MsgBox messaggio, in cui messaggio rappresenta il parametro da inviare alla procedura stessa. Per definire una Funzione si utilizza:
Function nome_funzione( [ variabile [, variabile ] ) corpo della funzione... nome_funzione = valore_di_ritorno End FunctionL'istruzione nome_funzione = valore_di_ritorno ci permette di ritornare un valore con la funzione stessa. Per richiamare una funzione si utilizza variabile = nome_funzione( [parametro [, parametro...] )La differenza fondamentale e' l'uso delle parentesi per i parametri. Nel nostro esempio di prima InputBox e' una funzione. Il richiamo della stessa avviene mediante
frase = InputBox("Immettere una frase di almeno 10 caratteri")
Dove
"Immettere ..."
e' il parametro della funzione (il testo da visualizzare), mentre
frase
e' la variabile che viene "caricata" con il risultato della funzione
stessa.Come esempio rivediamo lo stesso programmino di prima ma fatto mediante una funzione:
Dim frase
frase = ""
Do
frase = InputBox("Immettere una frase di almeno 10 caratteri")
Loop Until Len( frase ) > 10
MsgBox InvertiFrase( frase )
Function InvertiFrase( frase )
Dim lettera
Dim contatore
Dim fraseInversa
For contatore = Len( frase ) To 1 Step -1
lettera = Mid( frase, contatore, 1 )
fraseInversa = fraseInversa & lettera
Next
InvertiFrase = fraseInversa
End Function
|
|
Comments Max length of comments: 1000 chars. |
3 commenti Mattia dice il 03/04/2008 20:25: Grazie, guida molto istruttiva ma non mi è chiara una cosa: questo linguaggio è appunto il "succo" del visual basic. Quindi se per "programmare" funzioni uso il linguaggio visual basic normale funziona lo stesso? Il WSH era utile sulle vecchie versioni di Windows (95/98), non so se in seguito e' stato mantenuto, espanso o semplicemente abbandonato. Dovrai domandare a Microsoft ;-) Razziatore dice il 26/05/2008 04:28: Uhm... guida bella conoscevo già il WSH ( mai fatto niente ma lo conoscevo ).. ma una domanda...non avevi detto che ci sarebbero stati alcuni esempi in JS?
L'idea c'era, solo che come al solito Microsoft ha rigirato il tutto e sostanzialmente il WHS e' "uscito di scena"...
Non che sia difficile la conversione, la mia era solo una curiosità... se era previsiti e non li hai messi o se sono previste altre puntate ( e non le hai messe samu dice il 29/05/2008 15:15: Ciao comodo lo scripting, ti automatizza alcune procedure che altrimenti dovresti fare a manina... esempio inserimento in active directory di un sacco di utenti... ne ho finito uno (oddio, mi manca tutta la parte di controllo errori da parte di utente/script), ma è funzionante... tra qualche gg dovrei testarlo appieno (o meglio, un collega) crea utenti in active directory partendo da un file excel, settando l'account con i valori immessi (scadenza password, home dir, gruppi, etc etc), crea la cartella coi relativi privilegi e la condivide... comodo e veloce :) Add a comment (max 1000 chars)
|
| Author |
Davide Bianchi,
works as Unix/Linux administrator for a "network security" company of Haarlem. Contacts: mail: davide AT onlyforfun.net , ICQ: 268751033, Jabber: davideyeahsure AT gmail.com Skype: davideyahsure |
| Contribuire | Volete contribuire? Leggete come! |
| Copyright | This site is made by me with blood, sweat and gunpowder, if you want to republish or redistribute any part of it, please drop me (or the author of the article if is not me) a mail. |
This site isn't optimized for vision with any specific browser, nor
it requires special fonts or resolution.
You're free to see it as you wish.
Last Update: 04/12/2008