Skip to content

2. De uitvoeringscontexten van VBSCRIPT

2.1. Introduction

Een programma vbscript wordt niet rechtstreeks onder Windows uitgevoerd, maar in een container die het een uitvoeringscontext en een aantal eigen objecten verschaft. Bovendien kan het VBScript-programma gebruikmaken van objecten die door het Windows-systeem ter beschikking worden gesteld, zogenaamde ActiveX-objecten.

In dit document zullen we twee containers gebruiken: Windows Scripting Host, in de volksmond WSH genoemd, en de webbrowser Internet Explorer, die hierna soms IE wordt genoemd. Er zijn er nog veel meer. Zo zijn de MS-Office-toepassingen containers voor een afgeleide van VB, genaamd VBA (Visual Basic for Applications). Daarnaast zijn er talrijke Windows-toepassingen waarmee gebruikers de beperkingen van het besturingssysteem kunnen omzeilen door programma’s te ontwikkelen die binnen de toepassing worden uitgevoerd en gebruikmaken van de eigen objecten van die toepassing.

De container waarin het VBScript-programma wordt uitgevoerd, speelt een cruciale rol:

  • De objecten die door de container aan het VBScript-programma ter beschikking worden gesteld, verschillen van container tot container. Zo stelt WSH aan een VBS-programma een object ter beschikking met de naam WScript, dat bijvoorbeeld toegang biedt tot de netwerkshares en -printers van de hostmachine. IE stelt daarentegen aan het VBS-programma een object ter beschikking met de naam document, dat het volledige weergegeven document HTML vertegenwoordigt. Het VBS-programma kan vervolgens bewerkingen uitvoeren op dit document. Excel stelt aan een programma VBA objecten ter beschikking die werkboeken, werkbladen, grafieken enz. vertegenwoordigen... in feite alle objecten die door Excel worden beheerd.
  • Hoewel de objecten in een container een VBScript-programma alle mogelijkheden bieden, kunnen ze soms bepaalde toepassingsgebieden beperken. Zo heeft een VBScript-programma dat wordt uitgevoerd in de browser IE om veiligheidsredenen geen toegang tot de schijf van de hostcomputer.

Wanneer we het dus over VBScript-programmering hebben, moet worden aangegeven in welke container het programma wordt uitgevoerd.

Onder Windows is VBScript niet de enige taal die in de containers WSH of IE kan worden gebruikt. Je kunt bijvoorbeeld JScript (=JavaScript), PerlScript (=Perl), Python, ... gebruiken. Veel van deze talen lijken op het eerste gezicht superieur aan VBScript. Maar VBScript heeft toch een aantal serieuze troeven:

  • VB en de varianten VBSCRIPT en VBA zijn zeer wijdverspreid op Windows-computers. Kennis van deze taal lijkt onmisbaar.
  • Het zijn eerder de objecten die door een programma kunnen worden gebruikt dan de taal die het programma gebruikt, die de kracht ervan bepalen. Veel van deze objecten worden echter geleverd door de containers en niet door de talen zelf.

Een nadeel van VBSCRIPT is dat het niet overdraagbaar is naar een ander systeem dan Windows, bijvoorbeeld Unix. Zijn concurrenten JavaScript, Perl en Python zijn dat wel. Als men op heterogene systemen moet werken, kan het interessant of zelfs onmisbaar zijn om op de verschillende systemen dezelfde taal te gebruiken.

2.2. De container WSH

De container WSH (Windows Scripting Host) maakt het mogelijk om binnen Windows programma’s uit te voeren die in verschillende talen zijn geschreven: VBScript, JavaScript, PerlScript, Python, ... Er is een standaard waaraan moet worden voldaan om een taal binnen WSH te kunnen gebruiken. Elke taal die aan deze norm voldoet, komt in aanmerking voor uitvoering binnen WSH. Het is denkbaar dat de bovenstaande lijst met talen die in WSH kunnen worden uitgevoerd, nog zal worden uitgebreid. Een container stelt aan de programma’s die hij uitvoert objecten ter beschikking die hen hun werkelijke kracht geven. Dit heeft de neiging om de verschillen tussen talen te vervagen, aangezien ze dan allemaal dezelfde set objecten gebruiken. Het gebruik van de ene taal in plaats van de andere kan dan een kwestie van smaak worden in plaats van van prestaties.

De uitvoering van een programma in WSH gebeurt met behulp van twee uitvoerbare bestanden: wscript.exe en cscript.exe. wscript.exe bevindt zich normaal gesproken in de Windows-installatiemap, die doorgaans %windir% heet:


C:\ >echo %windir%
C:\WINDOWS

C:\>dir c:\windows\wscript.exe
WSCRIPT  EXE       123 280  19/09/01  11:54 wscript.exe

L'exécutable cscript.exe se trouve lui sous %windir%\command :

C:\>dir c:\windows\cscript.* /s

Répertoire de C:\WINDOWS\COMMAND
CSCRIPT  EXE       102 450  26/06/01  17:49 cscript.exe

De 'w' in wscript staat voor windows en de 'c' in cscript staat voor console. Een script kan zowel met wscript als met cscript worden uitgevoerd. Het verschil zit hem in de manier waarop berichten op het scherm worden weergegeven:

  • wscript geeft ze weer in een venster
  • cscript geeft ze weer op het scherm

Hier is een script coucou.vbs dat coucou op het scherm weergeeft:

Image

Laten we een venster DOS openen en het achtereenvolgens uitvoeren met wscript en cscript:

DOS>wscript coucou.vbs

Image

DOS>cscript coucou.vbs

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

coucou

Hierboven is het verschil tussen de twee modi duidelijk te zien. In dit document zullen we vrijwel uitsluitend de consolemodus cscript gebruiken. Dit is de modus die geschikt is voor zogenaamde "batch"-toepassingen, dat wil zeggen toepassingen zonder interactie met een gebruiker via het toetsenbord. Er zijn twee punten op te merken in de bovenstaande resultaten:

  1. We zijn ervan uitgegaan dat de uitvoerbare bestanden wscript.exe en cscript.exe zich beide in de map "PATH" op de machine bevonden, waardoor ze eenvoudig door het invoeren van hun naam kunnen worden gestart. Als dat niet het geval was geweest, had hier het volgende moeten staan:
DOS>c:\windows\wscript coucou.vbs
DOS>c:\windows\command\cscript coucou.vbs
  1. Merk op dat de versie van wsh die in dit voorbeeld en in de rest van het document wordt gebruikt, versie 5.6 is.
  1. Het bronbestand van het script heeft de extensie .vbs. Dit is de extensie die verwijst naar een script vbscript, terwijl een script javascript wordt aangeduid met de extensie .js.

Het programma cscript heeft verschillende startopties die je kunt bekijken door cscript zonder argumenten uit te voeren:

DOS>cscript

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

Utilisation : CScript scriptname.extension [option...] [arguments...]

Options:
//B          batch: onderdrukt de weergave van promptberichten en scriptfouten
//D          Debuggen inschakelen
//E:engine   Gebruik de engine voor het uitvoeren van scripts
//H:CScript Vervang de standaard scriptuitvoeringsomgeving door CScript.exe
//H:WScript tRemplace de standaard scriptuitvoeringsomgeving door WScript.exe (standaard)
//I          Interactieve modus (standaard, tegengesteld  aan de optie //B)
//Taak:xxxx     Een taak uitvoeren WSF
//Logo       Een logo weergeven (standaard)
//Nologo     Weergave van een logo verhinderen: er wordt geen banner weergegeven tijdens de uitvoering
//S          De huidige opdrachtregelopties voor deze gebruiker opslaan
//T:nn       Uitvoeringstijd in seconden : Maximaal toegestane tijd voor het uitvoeren van een script
//X          Een script uitvoeren in de debugger

Het argument //nologo schakelt de weergave van de wsh-banner uit:

C:\>cscript //nologo coucou.vbs
coucou

2.3. De opbouw van een script WSH

We hebben zojuist een eerste script gezien: coucou.vbs

Image

We hebben aangegeven dat de bestandsextensie .vbs van het bestand verwijst naar een script met de naam vbscript. Dit is niet verplicht. We hadden het script ook in een bestand met de extensie .wsf kunnen plaatsen in de volgende, complexere vorm:

Image

Het uitvoeren van dit script levert het volgende op:

C:\>cscript //nologo coucou2.wsf
coucou

Een script met de naam WSH kan verschillende talen combineren:

Image

Het uitvoeren van dit script levert het volgende op:

1
2
3
4
C:\>cscript //nologo coucou3.wsf
coucou (vbscript)
coucou (javascript)
coucou (perlscript)

We onthouden de volgende punten:

  1. De container WSH is niet aan een taal gekoppeld. Een wsh-script kan verschillende talen combineren in een bestand met de extensie .wsf
  2. Het script wordt dan omgeven door de tags <job id="..."> ... </job>
  3. Binnen de toepassing (=job) worden de talen die door de verschillende codegedeelten worden gebruikt, gemarkeerd met <script language="...."> .... </script>
  4. Deze opmaaktaal heeft een naam: XML, wat staat voor eXtended Markup Language. XML definieert geen tags, maar regels voor de indeling van tags. Hier zouden we dus moeten zeggen dat de opmaaktaal die in een WSH-script wordt gebruikt, de norm XML volgt.

Vervolgens zullen we uitsluitend VBScript gebruiken in .vbs-bestanden.

2.4. Het object WSCRIPT

De container WSH stelt aan de scripts die hij uitvoert een object ter beschikking met de naam wscript. Een object heeft eigenschappen en methoden:

Een object Obj heeft eigenschappen Pi die de toestand ervan bepalen. Zo kan een object thermomètre een eigenschap température hebben. Deze eigenschap is een van de aspecten van de toestand van de thermometer. Een ander aspect zou de maximale temperatuur Tmax kunnen zijn die de thermometer kan verdragen.

Het object Obj kan methoden Mj hebben waarmee externe actoren:

  • de toestand ervan te achterhalen
  • de toestand ervan te wijzigen

Zo zou onze thermometer, als deze elektronisch is, een methode allumer kunnen hebben waarmee hij wordt ingeschakeld, een andere éteindre waarmee hij wordt uitgeschakeld, en nog een andere afficher waarmee de evenwichtstemperatuur wordt weergegeven zodra deze is bereikt. In programmeertaal is een methode een functie die argumenten kan aannemen en resultaten kan retourneren.

In VBScript worden de eigenschappen Pi van een object Obj aangeduid met Obj.Pi en de methoden Mj met Obj.Mj. Het wscript-object van WSH is een belangrijk object vanwege de methoden die het aan scripts ter beschikking stelt. Zo maakt de methode echo het mogelijk om een bericht weer te geven. De syntaxis van deze methode is als volgt:

wscript.echo arg1, arg2, ..., argn

De waarden van de argumenten van argi worden vervolgens weergegeven in een venster (uitvoering via wscript) of op het scherm (uitvoering via cscript onder DOS).

2.5. De Internet Explorer-container

We hebben hierboven vermeld dat Internet Explorer als container voor een VBScript-script kan fungeren. Laten we dit aan de hand van een eenvoudig voorbeeld illustreren. Hieronder volgt een HTML-pagina (HyperText Markup Language) met de naam coucou2.htm die geen VBScript-script bevat.

21

Image

Het rechtstreeks laden ervan via Internet Explorer (Fichier/Ouvrir) levert de volgende resultaten op:

De inhoud van het bestand coucou2.htm laat zien dat HTML een opmaaktaal is. Wie de taal HTML kent, kent deze tags. Deze hebben als voornaamste doel de browser aan te geven hoe een document moet worden weergegeven. HTML volgt de norm XML niet exact, maar komt er wel dicht bij in de buurt.

In coucou2.htm zijn er twee stukjes informatie, aangeduid met 1 en 2. We hebben deze ook weergegeven in de weergave die ervan is gemaakt. Het is de tag <title>...</title> die ervoor heeft gezorgd dat informatie 1 in de titelbalk van de browser is geplaatst, en de tag <body>..</body> die ervoor heeft gezorgd dat informatie 2 in het documentgedeelte van de browser is geplaatst.

We zullen niet verder ingaan op de taal HTML. Laten we het bestand coucou2.htm aanpassen door er een VBScript in op te nemen en het nu coucou1.htm te noemen:

Image

Het VBScript-script is in de tag <head>...</head> geplaatst. Het had ook elders geplaatst kunnen worden. Het geeft "coucou" weer bij het eerste laden van de pagina. Hier moet de browser Internet Explorer zijn, omdat alleen deze browser standaard een container voor VBScript-scripts is. De weergave is dan als volgt:

Image

gevolgd door de normale weergave van de pagina:

Image

Het uitgevoerde script was het volgende:

Image

Terwijl de container WSH aan het script een object met de naam wscript ter beschikking stelde waarmee weergaven konden worden gemaakt met de methode echo, stelt IE hier aan het script een object window ter beschikking waarmee we weergaven kunnen maken met de methode alert. Om dus „coucou“ weer te geven, schrijft men wscript.echo „coucou“ in WSH en window.alert „coucou“ in IE. Ook hier kan worden aangetoond dat er in feite meerdere talen kunnen worden gebruikt in de container IE. We nemen het voorbeeld dat al in WSH is getoond binnen een pagina coucou3.htm:

Image

Bij het laden van deze pagina door IE worden eerst drie informatievensters weergegeven:

waarna de definitieve pagina wordt weergegeven:

Image

2.6. De helpfunctie van WSH

WSH wordt geleverd met een helpsysteem dat zich doorgaans bevindt in de map "C:\Program Files\Microsoft Windows Script\ScriptDocs". Voor versie 5.6 van WSH heet het helpbestand "SCRIPT56.CHM". U hoeft alleen maar op dit bestand te dubbelklikken om de helpfunctie te openen. Het kan handig zijn om hier een snelkoppeling op uw bureaublad van te maken.

Eenmaal gestart, ziet het er ongeveer als volgt uit:

Image

Hierin vind je de help voor de container WSH, maar ook die voor de talen VBScript en JavaScript. Het is een onmisbaar hulpmiddel voor zowel beginners als ervaren programmeurs. Er zijn verschillende manieren om met deze help te werken:

  • je weet niet precies wat je zoekt. Je wilt gewoon ontdekken wat er wordt aangeboden. Dan kun je het tabblad Sommaire hierboven gebruiken. Je kunt bijvoorbeeld bekijken wat er voor VBScript wordt aangeboden:

Image

In de help van VBscript vind je veel informatie die niet in dit document staat.

  • U kunt naar iets specifieks zoeken, bijvoorbeeld hoe u de functie msgbox van VBscript moet gebruiken. Gebruik dan het tabblad Rechercher:

Image

De helpfunctie geeft alle onderwerpen weer die verband houden met het gezochte woord. Over het algemeen zijn de eerste voorgestelde onderwerpen het meest relevant. Dat is hier het geval: het eerste voorgestelde onderwerp is het juiste. U hoeft er alleen maar op te dubbelklikken om de informatie over dit onderwerp te bekijken:

Image