E` il nuovo giocattolo della Microsoft che sostituisce il vecchio meccanismo dei batch files. Il marchingegno e` indipendente dal linguaggio. La Microsoft support VBScript e JScript. Esistono moduli prodotti da terze parti per utilizzare ad es. Perl o Python.
Una caratteristica molto interessante e` che e` possibile utilizzare o realizzare componenti COM che esportino interfacce di tipo Automation (quelle facili da usare).
Mediante i comandi CSCRIPT o WSCRIPT. CSCRIPT esegue il file da console, WSCRIPT in Windows.
Le estensioni VBS e JS sono registrate, per cui da windows explorer e` possibile lanciare uno script mediante doppio click o accedere ad un menu contestuale mediante il tasto destro del mouse.
Per scrivere semplici messaggi di output in VBScript e` necessario usare il metodo echo dell’oggetto wscript. Ad es:
wscript.echo
“ello uord”
Serve per realizzare “al volo” componenti COM utilizzando un linguaggio di scripting.
Mediante un wizard e` possibile creare un file con estensione “.wsc” contenente un sorgente XML che con dei tag appositi descrive le proprieta` e i metodi dell’oggetto.
Con un linguaggio di scripting a scelta si possono poi implementare i metodi.
Esistono delle estensioni per creare componenti da utilizzare all’interno di pagine DHTML o ASP.
Il software si puo` scaricare liberamente da M$OFT
http://msdn.microsoft.com/scripting
windows script 5.1 en
windows script component wizard 5.1
windows script documentation
Mediante il wizard si fornisce il nome del componente e la directory in cui generarlo. Il wizard proporra` automaticamente il nome del file con l’implementazione e il Program ID con cui ci si riferira’ all’oggetto.
La seconda pagina del wizard chiede il linuguaggio di scripting da utilizzare, se si desidera il supporto speciale per DHTML o ASP e opzionalmente il check sugli errori e la modalita` di debug.
La terza pagina permette di specificare le proprieta`
La quarta pagina permette di specificare i metodi
La quinta pagina permette di specificare gli eventi che l’oggetto puo` scatenare. (questa parte non l’ho ancora esaminata)
A questo punto viene proposta la pagina per generare il componente.
Il componente generato e` il seguente:
<?xml
version="1.0"?>
<component>
<?component
error="true" debug="true"?>
<registration
description="Esempio"
progid="Esempio.WSC"
version="1.00"
classid="{63adc260-bd47-11d3-a1ab-006097aa17c4}"
>
</registration>
<public>
<property name="proprieta1">
<get/>
<put/>
</property>
<method name="metodo1">
<PARAMETER name="parametro1"/>
<PARAMETER name="parametro2"/>
</method>
</public>
<implements
type="Behavior" id="Behavior"/>
<script
language="VBScript">
<![CDATA[
dim
proprieta1
proprieta1
= "default1"
function
get_proprieta1()
get_proprieta1 = proprieta1
end
function
function
put_proprieta1(newValue)
proprieta1 = newValue
end
function
function
metodo1(parametro1, parametro2)
metodo1 = "Temporary Value"
end
function
]]>
</script>
</component>
Facendo doppio click su Esempio.wsc il file viene aperto con notepad. E` sufficiente modificare il codice per implementare i metodi.
Il menu contestuale di Esempio.wsc comprende le voci Register, Unregister e Generate Type Library. Per utilizzare il componente e` necessario registrarlo.
<html>
<head>
<title>prova
wsh</title>
</head>
<body>
<script
language=vbscript>
set
oggetto = CreateObject("ElencoMail.wsc")
oggetto.PrelevaElenco(document)
set
oggetto = Nothing
</script>
</html>
<?xml
version="1.0"?>
<component>
<?component
error="true" debug="true"?>
<registration
description="ElencoMail"
progid="ElencoMail.WSC"
version="1.00"
classid="{d16eb720-bd3d-11d3-a1ab-006097aa17c4}"
>
</registration>
<public>
<method name="PrelevaElenco">
<PARAMETER name="document"/>
</method>
</public>
<implements
type="Behavior" id="Behavior"/>
<script
language="VBScript">
<![CDATA[
function
PrelevaElenco(document)
Set db = CreateObject("ADODB.Connection")
db.open "db_mail", "python",
"python"
Set rs = CreateObject("ADODB.Recordset")
rs.ActiveConnection = db
rs.open "select * from messaggi"
document.write("<table border=1><tr>")
with rs
for
i = 0 to .fields.count - 1
document.write("<td>"
& .fields(i).name & "</td>")
next
document.write("</tr>")
do until rs.eof
document.write("<tr>")
for i = 0 to .fields.count - 1
document.write("<td>"
& .fields(i).value & "</td>")
next
document.write("</tr>")
rs.movenext
loop
document.write("</table>")
end with
rs.close
db.close
set rs = nothing
set db = nothing
end
function
]]>
</component>