Windows script host

Pagina per appunti per i linguaggi che eseguono sul windows script host.

VBscript learning

In windows (XP) il linguaggio di script che conoscevo era quello che permetteva di creare i .bat , ovvero il linguaggio di scripting ereditato da msdos ed espanso man mano. E' discretamente potente ma per fare cose che, apparentemente, dovrebbero esser semplici, si diventa prolissi. Un linguaggio di scripting, invece, deve essere "semplice" da usare, ovvero con sintassi compatta molto simile al linguaggio naturale e, per questo, si accetta che non sia proprio efficiente come linguaggi più vicini al linguaggio macchina (uno dei quali C, che è potentissimo ma decisamente prolisso in termini di istruzioni) ma che permetta di fare, comunque, molte cose.

Io che sono lento a scoprire e capire le cose, ho scoperto l'evoluzione del .bat su windows che sono gli script in [[http://en.wikipedia.org/wiki/VBScript|VBscript]] (recentemente sostituiti dalla windows powershell solo su alcune versioni di win) che hanno un'elevata compatibilità di esecuzione in ambienti windows (non dos), proprio come i .bat (powershell invece non è così portabile).
Mumble, gli script VBS non sono proprio esenti da macchine virtuali, anche se non del calibro dell'ambiente .netFramework che, almeno sul disco (in ram non sempre) è un piombo. Bisogna usare l'ambiente windows script host. Mi correggo, WSH è già presente come modulo aggiuntivo in diverse installazioni di windows1, è possibile aggiornarlo senza troppi problemi (anche se magari non alle ultime versioni, a versioni molto simili all'ultima). Per netframework non è sempre così, ad esempio su Vista e 7 è disponibile di base ma va aggiornato, su 2k (che è XP leggermente limitato) l'ultimo netframework disponibile è il 2.0 . Ora, io capisco non supportare più sistemi con una certa architettura, ma nt5 e nt6 sono molto simili, non supportarli pienamente entrambi è assurdo (imo). A livello commerciale no perchè spinge all'upgrade e l'azienda ci guadagna.

Tuttavia, siccome la msdn library non è facilmente scaricabile e la vedo un pochino confusionaria, devo farmi una lista di link utili.

Nota: Ormai visual basic "puro" non si può più usare salvo non si voglia usare il 6 che è un'implementazione del 1998. Le nuove avviano necessariamente una parte della macchina virtuale compresa nel package .net framework quindi script in visual basic sarebbero non poco pesanti (e poco portabili poichè a seconda del .net framework richiesto non è possibile eseguirli su alcuni sistemi win). Invece Visual basic for application ((posto di considerare solo office dal 2007 in poi, perchè gli office precedenti producono, loro stessi, semplicemente documenti poco stabili e quindi il lavoro si perde)) e VBscript sono decisamente utili, senza contare che la sintassi del basic non cambia molto qualora volessi puntare su implementazioni di basic open (gambas per esempio). Ora, basic è visto come "il male" ma non necessariamente è così, dipende dall'implementazione e dalle estensioni alla sintassi, comunque sia è potentissimo per sviluppare velocemente in modo compatto (con roba direttamente eseguibile senza altre richieste) roba semplice ma utile. Altri linguaggi per fare le stesse come (Pascal, C, etc..) richiedono più codice scritto e maggiori conoscenze (anche se, ovviamente, sono più professionali).

Link utili

(occhio che poi devi aggiornarli che la MSDN ogni tanto cambia)

Qualità MSDN library

Incredibile, è vero che ho letto abbastanza sul linguaggio basic (in vari dialetti molto simili) e mi sono sporcato un pochino le mani, ma anche senza comprare o ottenere alcun manuale relativo al basic, le sezioni sulla MSDN library dovrebbero bastare a dare una discreta conoscenza del linguaggio. Confermo con un pochino di ragionamento (ma forse sono influenzato dalle esperienze precedenti) si capisce parecchio, ad esempio ora ho capito che le property di un oggetto sono le funzioni GET (vedi link sezione precedente), mentre quando usavo VBA pensavo fossero variabili d'istanza.

PsPad VBScript.Def

utile per crearsi una libreria ai singoli comandi senza appesantire la lista dei link utili

Logical operation between bits

dim bitLogical
bitLogical = (0 and 2)
  'dovrebbe effettuare l'and bit per bit tra 0 e 2
  'ora 0 ha tutti zero mentre 2 solo uno, il risultato è solo 0'
wscript.stdout.writeline("Log op:" & bitLogical)

bitLogical = (1 and 2)
wscript.stdout.writeline("Log op:" & bitLogical)
  '1 ha il primo bit ad uno, mentre 2 ha il secondo bit ad uno, sono sfasati e quindi ottengo 0'

bitLogical = (2 and 2)
wscript.stdout.writeline("Log op:" & bitLogical)
  '2 e 2 sono uguali quindi torna l'identità'

bitLogical = (3 and 2)
wscript.stdout.writeline("Log op:" & bitLogical)
  '3 e 2 hanno un bit ad 1 nella stessa posizione, quindi si torna 2'

bitLogical = (4 and 2)
wscript.stdout.writeline("Log op:" & bitLogical)
  '4 e 2 non hanno nessun bit ad uno nella stessa posizione torna 0'

dim enumerate
enumerate = array((4+2),(8+2), (8+4+2))
  'una serie di numeri con il secondo bit ad 1'
dim i
for i=0 to ubound(enumerate)
    bitLogical = (enumerate(i) and 2)
    wscript.stdout.writeline("Log op:" & bitLogical)  
next

Jscript

E' il cugino di VBscript perchè esegue sempre sul windows script host (quindi molti link per vbscript sono riutilizzabili perchè gli oggetti forniti dal WSH sono uguali) ma dovrebbe essere simile a javascript, molto simile. In questo modo scrivere script per il WSH in jscript renderebbe questi, a differenza del vbscript, molto più portabili perchè di engine javascript ne esistono molti ed ha quanto ho capito adattare uno jscript ad uno javascript (se non si usano molte chiamate a funzioni offerte dal WSH) non costa molto.
Si, sulla stessa MSDN invece di Jscript scrivono chiaramente Javascript, quindi dovrebbe essere praticamente simile se non identico.

Link utili

WMI tools

(Con jscript + windows script host + wmi posso definitivamente dire che linux spacca ma windows non scherza solo che le cose pro di windows sono poco conosciute, ho scoperto questi fantastici strumenti in ritardissimo. Maledetto me)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License