Skip to main content

Microsoft – Technopoche Windows Script : notions fondamentales

Paru le 10 juillet 2006
Par David Bossard

Sur cette page

IntroductionIntroduction

Situation / architectureSituation / architecture

ContenuContenu

Support TechniqueSupport Technique

Introduction

Note:les évolutions technologiques entraînent des évolutions de terminologie. Ainsi, Windows Script a pu être désigné par le passé sous les termes d'Active Scripting, de Scripting Technologies, ou, tout simplement, de Scripting.

Windows Script est une architecture ouverte permettant à un produit de bénéficier de langages de scripts destinés à effectuer des tâches complexes, en pilotant d'autres composants. En particulier, Windows Script permet :

  • d'apporter une interactivité à des pages Web dans Internet Explorer,
  • de créer des applications Web effectuant des tâches complexes (exemple : accès à des bases de données) sur le serveur,
  • d'automatiser des tâches d'administration (connexion de lecteurs réseaux lors du logon d'un utilisateur, etc.) sous Windows 32 bits

Ce document a pour but de définir de manière précise les différentes composantes de cette architecture, afin de comprendre les implications de son utilisation dans différentes situations.

Haut de pageHaut de page

Situation / architecture


Généralités

Windows Script se compose de deux éléments essentiels : l'hôte de script et le moteur de script.

l'hôte de script et le moteur de script.

Le moteur de script définit un langage, avec sa grammaire et ses fonctionnalités, utilisable par un hôte de script.

Microsoft fournit deux moteurs de script, VBScript et Jscript, mais d'autres moteurs ont été publiés par des éditeurs tiers (Perl, Rexx, Python, etc.).

L'hôte de script est un produit, application ou serveur, exposant certaines interfaces, lui permettant d'exécuter des scripts, dans un langage spécifique à un moteur de script. Cette application expose un modèle objet propre à son utilisation, contenant des objets dits "intrinsèques", directement utilisables dans le script.

Par ailleurs, les moteurs de script supportant les composants COM, il est possible d'attaquer depuis de tels scripts des modèles objets externes afin de piloter depuis l'application hôte d'autres produits, ou de tirer parti de librairies spécifiques afin d'effectuer des tâches complexes, comme des connexions à des bases de données (via ADO, Microsoft ActiveX Data Objects) ou des manipulations d'annuaires, comme Exchange, la SAM de Windows NT 4 ou l'Active Directory de Windows 2000 (via ADSI, Microsoft Active Directory Services Interfaces).


Applications hôtes

Il est important de comprendre que Windows Script n'est pas un "langage", ni un "outil de développement". Son utilisation n'a de sens qu'au travers de son application hôte. Les principales applications hôtes de Micorsoft sont énumérées ci-dessous, avec un bref descriptif du rôle de Windows Script au sein de chacun d'entre elles.

Internet Explorer

Windows Script, integré dans une page HTML grâce à des balises ("tags" en Anglais) <script>, permet une interactivité avec l'utilisateur et une manipulation du contenu du document HTML.

Le modèle objet exposé par IE est le Document Object Model (DOM), qui présente l'ensemble des éléments (tags HTML) de la page courante, sous forme d'objets possédant des propriétés (dont certaines correspondent aux attributs des tags HTML), des méthodes et des événements.


Active Server Pages

Active Server Pages est la plate-forme de développement d'applications Web proposée par Internet Information Server. Une page ASP est une page HTML contenant du script exécuté sur le serveur Web avant l'envoi de la réponse HTTP vers le client.

C'est par exemple dans ce genre de scripts que sont effectuées des opérations de connexions à des bases de données présentant à l'internaute le contenu de catalogues commerciaux.

Le modèle objet exposé par ASP comprend en particulier 5 objets instrinsèques, permettant de créer une dynamique d'application lors de l'interpétation de la page par le serveur :

  • Request représente la requête HTTP du client, contenant en particulier les paramètres de l'URL ou le contenu d'un formulaire HTML posté,
  • Response représente la réponse HTTP en préparation par le serveur, dans laquelle il est possible d'insérer du code HTML créé dynamiquement, ou qu'il est possible de rediriger vers une autre ressource du serveur Web,
  • Server permet l'accès à diverses fonctionnalités du serveur Web (création d'objets COM, correspondance entre répertoires virtuels et système de fichiers),
  • Application permet de partager des informations entre les différents utilisateurs d'une application Web,
  • Session permet de rendre persistantes des informations au cours d'une session d'utilisation, au-delà de la simple étendue d'une requête HTTP.


WSH

Windows Scripting Host est une plate-forme d'exécution de scripts intégrée au système d'exploitation Windows, utilisée afin de réaliser automatiquement des opérations d'administration.

Le modèle objet exposé par WSH permet d'effectuer des tâches d'administration courantes sous Windows (exploitation des variables d'environnement, gestion des ressources réseaux, création de raccourcis, manipulation de la base de registres).


Exchange

Il est possible de définir sur un dossier public d'Exchange un Scripting Agent, destiné à executer un script spécifique selon certains événements se déclenchant sur ce dossier (par exemple, le dépôt d'un nouveau message), gérés par l'Exchange Event Service. Cette fonctionnalité permet en particulier de créer des notifications d'envois ou des dynamiques plus complexes de travail collaboratif.

Le modèle objet exposé par le Scripting Agent permet de récupérer des objets CDO spécifiques fournis par l'Exchange Event Service, comme la session sous l'autorité de laquelle le script s'exécute, le dossier dans lequel l'événement est survenu, et éventuellement le message ayant déclenché l'événement.


Outlook

Il est possible d'associer à un formulaire Outlook spécifique un script s'exécutant sur des événements particuliers, tels que l'ouverture du message associé.


Historique

La table suivante liste les différentes applications hôtes Microsoft, par version de scripting.

La table suivante liste les différentes applications hôtes Microsoft, par version de scripting.

Haut de pageHaut de page

Contenu

Hormis les éléments centraux (produits du commerce/applications hôtes et moteurs de script), de nombreux ajouts ont été faits à Windows Script, pour en faire une plate-forme de travail ouverte s'adaptant à de nombreux besoins. Il peut s'agir de bibliothèques supplémentaires, d'hôtes particuliers ou d'outils de développement. Ce paragraphe passe en revue les éléments suivants, tous disponibles gratuitement sur le site Microsoft :

  • VBScript
  • JScript
  • Scripting Runtime
  • Windows Script Components
  • Windows Script Components Wizard
  • Windows Script Host
  • Script Debugger
  • Windows Script Interfaces
  • Script Control


VBScript

VBScript (Visual Basic Scripting Edition) est un langage de script dont la syntaxe s'apparente à celle de Visual Basic. Il reste le langage utilisé par défaut dans le code serveur des pages ASP.

La principale différence entre VBScript et Visual Basic est que les variables ne sont pas typées : là où un développeur Visual Basic écrit :

dim cnx as ADODB.Connection 

il écrirait simplement, en VBScript :

dim cnx 

 

L’exemple de code VBScript ci-dessous montre comment ouvrir une connexion ADO vers la base exemple SQL Server pubs, afin d’afficher les enregistrements de la table authors dans une boîte dedialogue.

 dim cnx
dim rs
dim s
set cnx = CreateObject("ADODB.Connection")
set rs = CreateObject("ADODB.Recordset")
cnx.Open "DSN=pubs;UID=sa;PWD=;"
rs.Open "SELECT * FROM authors", cnx
s = ""
do while not rs.EOF
for each f in rs.Fields
s = s & f.Value & vbTab
next
s = s & vbCRLF
rs.MoveNext
Loop
MsgBox s
rs.Close
cnx.Close
set rs = nothing
set cnx = nothing

 

VBScript est implémenté dans la DLL vbscript.dll, additionnée éventuellement de DLLs de ressources contenant les messages traduits dans différentes langues (exemple : vbsfr.dll pour la version française).


JScript

JScript est un langage de script spécifiquement destiné à l'utilisation au sein d'une page Web, côté client, dans la mesure où il s'agit du premier langage de script du commerce se conformant entièrement à ECMAScript (spécification standardisée pour les langages de script à destination du web). Sa syntaxe s'apparente à celle du langage Java, mais il s'agit d'un tout autre langage.

Contrairement à VBScript, JScript tient compte de la casse (majuscules / minuscules) ; en particulier, les variables maVariable et MaVariable sont différentes.

L’exemple de code JScript suivant, utilisé avec Internet Explorer en tant qu’application hôte, utilise le Document Object Model (DOM) afin d’apporter une interactivité (actions sur certains événements utilisateur, comme un clic de souris), une manipulation de la structure du document HTML (ajout de texte) ainsi qu’une personnalisation du comportement standard d’Internet Explorer (un message de confirmation est demandé à l’utilisateur souhaitant quitter la page) :

<html>
<title>Titre de la page</title>
<body>
<h1 id="titre">Ceci est une page de test</h1>
<a href="http://msdn2.microsoft.com/en-us/library/ms950396.aspx" onclick="return doClick();">Scripting</a>
<script language="JScript">
function doClick()
{
if (!window.confirm("Quitter '" + document.title + "' ?"))
{
titre.innerHTML += " (que vous avez failli quitter)...";
return false;
}
}
</script>
</body>
</html>

 

JScript est implémenté dans la DLL jscript.dll, additionnée éventuellement de DLLs de ressources contenant les messages traduits dans différentes langues (exemple : jsfr.dll pour la version française).


Scripting Runtime

Le Scripting Runtime est une bibliothèque permettant d'effectuer des opérations sur le système de fichiers (parcours des lecteurs et dossiers, manipulation de fichiers, etc.), et mettant à disposition de l'utilisateur un objet dictionnaire (tableau indexé non pas par des variables non entières, utilisable par exemple pour associer de manière unique un résultat à une valeur).

L’exemple de code VBScript suivant, utilisé avec WSH comme application hôte, liste le contenu du dossier temporaire du système, par type de fichiers. Les résultats sont calculés dans un dictionnaire associant à chaque type de fichier le nombre de fichiers correspondants.

 dim oFS
dim oDic
dim s
set oDic = WScript.CreateObject("Scripting.Dictionary")
set oFS = WScript.CreateObject("Scripting.FileSystemObject")
s = "content of " & oFS.GetSpecialFolder(2) & " by file types" & vbCRLF & vbCRLF
for each oFile in oFS.GetSpecialFolder(2).Files
oDic(oFile.Type) = oDic(oFile.Type) + 1
next
for each item in oDic
s = s & oDic(item) & " " & item & vbCRLF
next
MsgBox s
set oFS = nothing
set oDic = nothing

 

Le Scripting Runtime est livré en standard avec les dernières versions des moteurs de scripts, et ses différents objets sont donc utilisables depuis la plupart des applications hôtes.

Il est implémenté dans la DLL scrrun.dll, additionnée éventuellement de DLLs de ressources contenant les messages traduits dans différentes langues (exemple : scrrnfr.dll pour la version française).


Windows Script Components

Les Windows Script Components (livrés avec Windows Script 5.0) permettent aux développeurs de créer de véritables objets COM implémentés avec des langages de script, utilisable depuis n’importe quel environnement de développement supportant les composants COM : Visual Basic, Visual C++, mais également des langages de scripts, utilisés dans des applications Web (pages ASP), des pages HTML (DHTML d’Internet Explorer) des scripts WSH, ou d'autres applications hôtes.

Cette fonctionnalité est rendue possible par l’utilisation d’une DLL faisant office d’application hôte, le Windows Script Component Runtime (scrobj.dll). C’est cette DLL qui a en charge l’enregistrement des informations du composant dans la base de registres (ProgID, CLSID…), ainsi que l’interprétation de ses scripts au cours de son exécution.

C’est un moyen facile d’adapter un code de script existant à une architecture structurée, ou de tester rapidement un composant simple, aucune compilation ni aucun environnement de développement n’étant nécessaire.

Un Windows Script Component est constitué d'un fichier source conforme à la syntaxe XML, contenant les informations d'enregistrement du composant, ainsi que son implémentation (script à proprement parler). Il est possible de créer des composants adaptés à des hôtes spécifiques, par le biais d'interface handlers. Par défaut, les Windows Script Components peuvent accéder aux modèles objets ASP ou DHTML.

Le fichier UserLib.WSC suivant implémente un objet permettant à une page ASP de vérifier l'existance d'un dossier du type <RootFolder>\<UserName>où RootFolder est par défaut le chemin physique de l'application Web, et UserName, le nom de l'utilisateur connecté.

 

<?xml version="1.0"?>
<component>
<registration
description="UserLib"
progid="UserLib.WSC"
version="1.00"
classid="{5089f7ab-bbf1-4b94-8063-40339652e6bc}">
</registration>

 

<public>
<property name="UserFolder">
<get/>
<property>
<property name="RootFolder">
<get/>
<put/>
</property>
<method name="Check">
</method>
</public>

 

<implements type="ASP" id="ASP"/>

 

<script language="VBScript">
<![CDATA[

 

dim UserName
dim RootFolder

 

UserName = Request.ServerVariables("LOGON_USER")
UserName = Left(UserName, InStr(UserName,"\"))
if UserName = "" then UserName = "anonymous"

 

RootFolder = Request.ServerVariables("APPL_PHYSICAL_PATH")

 

function get_UserFolder()
get_UserFolder = RootFolder & "\" & UserName
end function

 

function get_RootFolder()
get_RootFolder = RootFolder
end function

 

function put_RootFolder(newValue)
RootFolder = newValue
end function

 

function Check()
dim fso
set fso = Server.CreateObject("Scripting.FileSystemObject")
Check = fso.FolderExists(UserFolder)
set fso = nothing
end function
]]>
</script>

 

</component>

 

La page ASP suivante utilise l'objet ainsi défini :

La page ASP suivante utilise l'objet ainsi défini :

<%@ Language="VBScript"%>
<HTML>
<HEAD>
</HEAD>
<BODY>

 

<%
seto=Server.CreateObject("UserLib.WSC")ifo.Check()thenResponse.Writeo.UserFolder&" exists<BR>
"
else
Response.Write o.UserFolder & " doesn't exist<BR>
"
end if
set o = nothing
%>

 

</BODY>
</HTML>

 

Dans la pratique, la mécanique d'enregistrement et d'interprétation des Windows Script Components est implémentée dans la DLL scrobj.dll, additionnée éventuellement de DLLs de ressources contenant les messages traduits dans différentes langues (exemple : scofr.dll pour la version française).


Windows Script Component Wizard

Cet outil permet de générer rapidement le squelette XML d'un Windows Script Component, comprenant les informations d'enregistrement, ainsi que l'interface de script (gestion des différentes propriétés, méthodes et événements). L'implémentation à proprement parler reste bien sûr à la charge du développeur.

Windows Script Component Wizard

 

Windows Script Host (WSH)

 

Windows Script Host est une application hôte "invisible" permettant d’exécuter des scripts directement depuis les systèmes d'exploitation Windows. Dans cette mesure, WSH est à considérer comme une sorte de "super batch". Il est particulièrement utilisé par les administrateurs afin d'automatiser des tâches ou de créer des scripts de connexion (exécutés lors du logon d'un utilisateur).

WSH existe en deux versions :

CScript.exe, une version "ligne de commande", particulièrement adapté pour les tâches ne nécessitant pas d'interaction utilisateur, ou destinées à manipuler des informations par les flots de données standards,

WScript.exe, une version "Win32", permettant une interactivité avec l'utilisateur par le biais de dialogues de saisie ou d'information.

Le code VBScript suivant vérifie l'existence d'un raccourci, sur le bureau de l'utilisateur, vers une feuille Excel "planning.xls". Au cas où ce dernier n'existe pas, il le crée. Le Scripting Runtime, ainsi que les objets Shell et Shortcut de WSH, sont utilisés pour réaliser cette action.

 

ddim oShell
dim oLnk
dim oFS

 

dim sLocalPath
dim sRemotePath

 

set oFS = WScript.CreateObject("Scripting.FileSystemObject")
set oShell = WScript.CreateObject("WScript.Shell")

 

sLocalPath = oShell.SpecialFolders("Desktop") & "\Planning.lnk"
sRemotePath = "\\srvequipe\activite\planning.xls"

 

if not oFS.FileExists(sLocalPath) then
set oLnk = oShell.CreateShortcut(sLocalPath)
oLnk.TargetPath = sRemotePath
oLnk.Save
end if

 

set oLNK = nothing
set oShell = nothing
set oFS = nothingg

 

Remote Scripting

Le Remote Scripting est une technologie permettant à un script DHTML (avec Internet Explorer comme application hôte) d'appeler des fonctions de script ASP (avec IIS comme application hôte). Cette architecture se base sur une applet Java lançant les appels entre le navigateur et le serveur Web, sans pour autant créer de requête HTTP.


Script Encoder

Le Script Encoder est un outil ligne de commande permettant de crypter un fichier source VBScript ou JScript, afin de garantir la propriété intellectuelle de l'implémentation. Le décodage est assuré par le moteur de script lui-même, par exemple par le biais de tags du type :

<script language="VBScript.encode" src="hot.vbs"></script> 

 

Script Debugger

Le Script Debugger est un environnement de debug étendant les fonctionnalités de certaines applications hôtes. Utilisé en conjonction avec Internet Explorer ou Internet Information Server, les développeurs peuvent parcourir, éditer et debugger les scripts exécutés par ces applications, grâce aux fonctionnalités suivantes :

  • visualisation du script en cours d’exécution,
  • contrôle de l’exécution du script avec des points d’arrêt et un parcours pas-à-pas,
  • visualisation et modification des valeurs des variables et propriétés utilisées,
  • visualisation et contrôle de la pile d’appels

Toutes ces fonctionnalités sont désormais intégrées et étendues avec l’outil de développement Visual Interdev 6, rendant obsolète l’utilisation du Script Debugger.

Windows Script Interfaces

Les Windows Script Interfaces sont un ensemble d’interfaces COM que les développeurs Visual C++ peuvent utiliser, afin de créer

  • des applications destinées à être hôtes de script, exposant éventuellement un modèle d’objets intrinsèques,
  • de nouveaux moteurs de scripts.

Microsoft fournit ces interfaces sous réserve de l’acceptation d’une licence d’utilisation et de développement.


Script Control

Le Script Control est un contrôle ActiveX (msscript.ocx) permettant aux développeurs de créer une application supportant le scripting. D’utilisation plus aisée que les Windows Script Interfaces, il est plus limité dans les possibilités offertes, mais demeure un moyen efficace de créer rapidement de petites applications devant exécuter des scripts.

Microsoft fournit ce contrôle sous réserve de l’acceptation d’une licence d’utilisation et de développement.

Haut de pageHaut de page

Support Technique

 

Conseils généraux

Comme il a été dit plus haut, Windows Script n'est pas à proprement parler un produit, ni un outil de développement. Dans cette mesure, la plupart des problèmes concernant Windows Script sont en fait liés à l'utilisation qui est faite de cette architecture, c'est-à-dire à l'application hôte.

Ainsi, les problèmes généralement rencontrés ne mettent pas en cause Windows Script, mais plutôt le contexte général de son utilisation (développement d'une application Web, mise en place d'un Agent sur un dossier public Exchange).

La bonne résolution d'un tel problème passe par une bonne compréhension de l'architecture (connaître les dépendances entre le moteur de script, l'application hôte, les modèles objets utilisés), une connaissance appronfondie des principaux moteurs (VBScript et JScript) et des principaux modèles objets (ADO, ADSI, etc.).

Le tableau suivant permet d'identifier la provenance d'un composant de Windows Script, de déterminer d'éventuelles incohérences d'installation entre application hôtes, et de comprendre pourquoi telle ou telle fonctionnalité est inaccessible (version ancienne de Windows Script).

version ancienne de Windows Script

Documentations

Windows Script étant un ensemble de technologies indépendantes d'une application ou d'un outil particuliers, le site Web http://msdn2.microsoft.com/en-us/library/ms950396.aspx demeure la principale source d'information sur ses différents composants dans leur version actuelle ou en version bêta.

Les principales documentations sont disponibles dans le MSDN ou en ligne sur le Web :

  • JScript (référence du langage, version 5.1) :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/jscript/doc/jstoc.htm
  • VBScript (Référence du langage, version 5.1) :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/vbscript/doc/vbstutor.htm


Téléchargement

Le site Web http://msdn2.microsoft.com/en-us/library/ms950396.aspx propose en téléchargement les dernières versions de tous les composants de Windows Script, permettant de mettre à jour une configuration composée d'anciennes applications hôtes, ou de mettre en place une plate-forme de travail basée sur WSH.

  • Windows Script 5.1 (contient VBScript 5.1, JScript 5.1, Windows Script Components, Windows Script Host 2.0, et Windows Script Runtime 5.1) :
    http://www.microsoft.com/msdownload/vbscript/scripting.asp
  • Documentation JScript (références et exemples du langage et du Scripting Runtime ; format HTML Help) :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/jscript/download/jsdoc.exe
  • Documentation VBScript (références et exemples du langage et du Scripting Runtime ; format HTML Help) :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/vbscript/download/vbsdoc.exe
  • Windows Script Component Wizard :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/scriptlets/wz10en.exe
  • Remote Scripting :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/remotescripting/x86/rs10en.exe
  • Script Control :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/scriptcontrol/scdown.htm
  • Script debugger 1.0 (pour les développeurs ne possédant pas Visual Interdev 6.0) :
    http://support.microsoft.com/kb/468028/fr
  • Script Encoder :
    http://msdn2.microsoft.com/en-us/library/ms950396.aspx/vbscript/download/vbsdown.htm

 

Haut de pageHaut de page