WSH

Initiation au scripting

Jean-Luc Antoine - 01/07/2002

WSH, VBS, JS, SOS...

Souvenez-vous, c'était hier... Les premières versions du DOS disposaient d'un système d'exécution de commandes présentes dans un fichier, les batchs (traitements par lots). Cette technique a perduré des années, jusqu'à ce que Biloo se décide enfin d'intégrer un système bien plus performant, le Windows Scripting Host.

WSH est inclus nativement dans le système pour Windows 98,2000,Me,XP ou toutes versions de Windows ayant installé IE5 ou supérieur. Techniquement, ce moteur repose sur le modèle COM et permet dans l'absolu d'exécuter tout type de script programmé dans tout langage conforme au modèle. Dans la réalité le système peut exécuter du VBScript et du JavaScript, aussi bien depuis la ligne de commande que par l'interface graphique. Microsoft a ainsi laissé ouverte la voie à d'autres interpréteurs de type REXX, TCL ou Perl, ce sera très utile pour les administrateurs (Web, réseau et bureautique). WSCRIPT.EXE et CSCRIPT.EXE permettent respectivement d'exécuter les scripts sur l'interface graphique et en ligne de commande. Ces scripts font office de programmes indépendants mais peuvent également être insérés simplement dans une page WEB : Internet Explorer les comprendra comme un composant ActiveX. Avec Internet Information Server, ces scripts peuvent être exécutés du côté du serveur et non plus sur le client. Tout comme les batchs, les scripts peuvent accepter des paramètres en lignes de commande. Il sera plus facile de les indiquer sous dos avec la syntaxe suivante : CSCRIPT.EXE <FichierScript> <Paramètres>. Lorsque vous lancez directement WScript.exe, une fenêtre apparaît vous permettant de paramètrer le comportement à l'exécution : logo s'affichant lorsque les scripts sont exécutés en ligne de commande et délai maximal d'exécution des scripts. Il est possible d'individualiser ces paramètres pour chaque script, en accédant aux propriétés du fichier avec le bouton droit de la souris (menu contextuel). Cela aura pour effet de créer un fichier *.wsh associé au fichier dans le même répertoire, exactement comme les fichiers *.PIF des exécutables.

Vous trouverez des examples de scripts sur ce site. Double-cliquez sur les fichiers *.JS ou *.VBS pour exécuter respectivement les fichiers en javascript ou en vbscript, et n'hésitez pas à éditer leur contenu avec le Bloc-notes. Vous remarquerez alors que le source est lisible. En effet, contrairement aux programmes compilés (*.exe) le script est ici interprété. Cela vous permet de modifier à loisir ces exemples : on peut dire que Windows est fourni avec un langage de programmation entièrement gratuit et opérationnel ! Plus besoin d'aller acheter Visual Basic pour programmer des tâches automatiques ou répétitives, il suffit de le faire directement en VBScript ! Cependant, contrairement à un vrai langage de programmation, on est ici en présence d'un script, c'est à dire une exécution sans interface utilisateur (sauf si intégré dans une page Web). Vous ne pourrez donc pas l'utiliser pour faire un jeu d'arcade, mais plutôt pour traiter des fichiers par exemple.

La main à la pâte

Puisque vous venez de voir de manière un peu abstraite le scripting sous Windows, nous allons effectuer nos premiers pas pour créer nous-même notre premier programme en VBScript. Il faut savoir que l'environnement de développement se limite au simple bloc-notes. Essayez de vous procurer la documentation complète du langage (elle ne s'invente pas) en allant la télécharger sur ce site ou à défaut celle de VB ou de VBA, pour pouvoir réellement programmer par vous-même. Comme pour les fichiers batchs, les lignes contiennent des commandes qui sont exécutées successivement. Les commandes permettent d'effectuer des actions ou modifier des valeurs.
Si vous effectuez de erreurs de programmation, comme par exemple l'utilisation d'un objet non défini, une boîte de dialogue apparaîtra à l'exécution pour vous indiquer clairement à quelle ligne vous avez commis votre erreur. L'exécution des scripts est donc relativement stable, vous n'aurez pas à redémarrer votre machine en permanence. Le langage étant simplissime, vous verrez qu'en un nombre restreint d'instructions on arrive à effectuer des belles choses. Comme pour tout début, le premier programme est celui permettant d'afficher le message "Hello, World". En C ou Pascal, il prend plusieurs lignes. En VBScript, une seule suffit : MsgBox "Hello, World".
La plupart des scripts auront besoin de contenir cette ligne :

Set WshShell = WScript.CreateObject("WScript.Shell")
Elle définit l'objet WshShell qui permettra d'accéder aux fonctions du système : afficher une boîte de message, obtenir des informations système... La programmation du script est orientée objet, c'est à dire qu'un objet donnera accès à ses propriétés (données personnelles qui le caractérisent) et méthodes (actions liées à l'objet). Les trois lignes suivantes permettent d'exploiter des informations saisies par un utilisateur :
Set WshShell = WScript.CreateObject("WScript.Shell")
Nom = InputBox("Rentrez votre nom")
WshShell.Popup "Bonjour " & Nom
Enregistrez ce fichier avec l'extension *.VBS et exécutez-le par un double-clic. Effectivement on est loin d'un logiciel commercial, mais cela permet de se faire une bonne idée de ce qu'est la programmation. Dans notre cas, les trois étapes correspondent à définir notre objet, demander des informations récupérées dans la variable "Nom" puis les afficher avec notre objet. Ce programme n'a vraiment aucun intérêt autre que didactique, mais les scripts permettent de créer des applications plus complexes faisant intervenir les réseaux, bases de registres et autres applications. Pour continuer, voici un script qui vous donne toutes les informations sur vos unités disques :
Dim fs, d, s, dc
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
on error resume next
for each d in dc
	rem Set d=fs.GetDrive(fs.GetDriveName(drvPath))
	s="Drive " & d.DriveLetter & ": - "
	if d.DriveType=Remote then
		s=s & d.ShareName & vbCrLf
	else
		s=s & d.VolumeName & vbCrLf
	end if
	s=s & "Espace libre: " & FormatNumber(d.FreeSpace/1024, 0) 
	s=s & " Ko sur " & FormatNumber(d.TotalSize/(1024*1024),0) & " Mo" & vbCrLf
	s=s & "N° série : " & d.SerialNumber & vbCrLf
	s=s & "Type : "
	Select Case d.DriveType        
		Case 0: s=s & "inconnu"
		Case 1: s=s & "amovible"
		Case 2: s=s & "Fixe"
		Case 3: s=s & "Réseau"
		Case 4: s=s & "CD-ROM"
		Case 5: s=s & "RAM Disk"
	End Select
	MsgBox s
Next
Effectivement, plus ce que l'on désire faire est compliqué, plus le script est long. Les scripts pouvant être exécutés sous Internet Explorer, voici de manière très simple la façon de les intégrer dans une page HTML (vierge dans notre cas) :
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
Page de test
<SCRIPT language="VBScript" SRC="TEST2.VBS">
</SCRIPT>
</BODY>
</HTML>
Vous aurez compris par vous même que notre script s'appelle Test2.vbs. Nommez cette page Test2.HTM et lancez-la. Une boîte de dialogue surgit aussitôt pour vous indiquer de faire attention à l'exécution des scripts qui peuvent avoir un comportement non sécurisé. La sécurité d'Internet Explorer prévient du danger d'exécuter les scripts. Effectivement, nous accédons aux informations du disque.

fonctions génériques

De nombreux scripts sont présents sur ce site pour vous montrer la simplicité du pilotage d'autres applications, d'attaquer la base de registres, d'automatiser le système. Leur taille de quelques Ko permet de ne pas se perdre dans un listing de plusieurs centaines de lignes.
Voici un petit script qui met en place une fonction générique de présentation d'une boîte de sélection de répertoire. En collectionnant ce type de fonctions réutilisables, vous créerez de plus en plus rapidement vos nouveaux scripts par simple assemblage.

Function B(Msg)
	On Error Resume Next
	Dim a,f,i,w
	Set a=WScript.CreateObject("Shell.Application")
	Set w=CreateObject("WScript.Shell")

	Set f=a.BrowseForFolder(&H0&,Msg,&h1&)
	B=f.ParentFolder.ParseName(f.Title).Path

	If Err.Number<>0 Then
		B=Null
		If f.Title="Desktop" Then B=w.SpecialFolders("Desktop")
		i=InStr(f.Title, ":")
		If i>0 Then B=Mid(f.Title,i-1,2) & "\"
	End If
End Function

S=B("Choisissez un répertoire")

If IsNull(S) Then 
    MsgBox "Sélection invalide" 
Else
    MsgBox S
End If

Pilotage d'applications - Word

WSH permet de piloter pratiquement toutes les applications de la suite Office et bien d'autres programmes du marché. Voici un exemple de pilotage de Word en utilisant l'objet mis à disposition sur le système :

Set WSHShell = WScript.CreateObject("WScript.Shell")
' Obtient une référence à l'objet Word Application.
Set appWord = Wscript.CreateObject("Word.Application")
appWord.Visible = TRUE	' Affiche l'application.
' Ouvre un document d'exemple.
appWord.Documents.Open("C:\essai.doc")
WSHShell.popup "A ce point, Word est ouvert et affiche un document." _
	& "Nous allons fermer le document et Word."
appWord.Quit	' On quitte
Set appWord = Nothing	' Libère la variable objet.
N'oubliez surtout pas cette dernière ligne, sans quoi Word occuperait inutilement la mémoire du système, même s'il n'est pas visible. Bien entendu, ce script ne fonctionnera que sur les systèmes équipés de Word. Si vous êtes déjà un habitué de la programmation des macros sous Word, il vous sera simple d'automatiser la création d'un document en utilisant les propriétés et méthodes de l'objet document de Word. Par exemple, il est envisageable de programmer un utilitaire qui autodocumente vos programmes en relevant tous les commentaires spéciaux que vous aurez parsemé le long de vos listings, pour les inscrire dans un unique document Word.

Pilotage d'applications - Internet Explorer

Voici un cas simple de pilotage d'Internet Explorer depuis un script, ce qui n'est pas banal car en temps normal c'est plutôt l'inverse : internet explorer manipule les scripts. Avec ce principe vous pourrez simplement automatiser le lancement d'IE, l'accès aux sites, la navigation....

Dim IE
Set IE=CreateObject("InternetExplorer.Application")
ie.left=50
ie.top=50
ie.height=510
ie.width=470
ie.menubar=0
ie.toolbar=1
ie.navigate "http://www.artabus.com"
ie.visible=1
Pour rentrer dans le détail du script, on commence par créer un objet de type Internet Explorer, puis on lui assigne des valeurs à ses différentes propriétés : positionnement, barres d'outil, menu, URL. Rien n'empèche d'imaginer que par la suite on enregistre également l'URL chargée, ce qui permettrait d'automatiser la récupération des pages sur le WEB si vous consultez assez souvent les mêmes sites. Ce script fonctionne uniquement si Microsoft Internet Explorer 4 ou supérieur est installé.

Pilotage d'applications - le système

Le système d'exploitation met lui-même certains objets à disposition et peut donc être piloté comme dans les précédents exemples.

Set WSHShell = WScript.CreateObject("WScript.Shell")
set shell = wscript.CreateObject("Shell.Application")
Shell.MinimizeAll
shell.Open "c:\windows"
shell.Open "c:\bootlog.txt"
Shell.TileVertically
WSHShell.popup "Restaure"
Shell.UndoMinimizeAll
Le script commence par créer un objet système de type shell pour pouvoir accéder aux boîtes de message. Cette boîte (avant dernière ligne) sert essentiellement à mettre une pause dans le script avant de restaurer l'environnement tel qu'il était, ce qui met bien en évidence sa fonction. Un second objet système est créé. La première méthode (Minimizeall) permet de réduire toutes les fenêtres affichées à l'écran et de libérer la vue sur le bureau. Les deux lignes suivantes ouvrent une fenêtre de l'explorer pointant sur le répertoire windows et une fenêtre affichant le contenu d'un fichier d'erreurs. Ensuite, les fenêtres sont alignées verticalement et la boîte de dialogue apparaît. En fait, elle est censée apparaître mais sur la machine de test elle figurait derrière les autres fenêtres. Est-ce un bug de WSH ? Enfin, la dernière ligne restaure les fenêtres des applications qui avaient été précédemment minimisées.
Server Info
Remote Info
Compress

Batchs
BootSector
Droit
Accessoire GFA
On Now
Ecran plasma
Système d'exploitation
Son
Unités
Scripting
Multilingue
Site Web
Bruit et son
Architecture Google


4K
Color picker
TaskList
Backup files
Mini Port Scanner
Website To CHM
PixyDemo
Web password recovery
4KWebServer
Kill Popup
VBE decoder
Script Optimizer
Database Password Recovery
Class
Ini
EMail validator
Graphical Class
MP3 Info
Pinger Class
IP ranger class
SoftwareMetering
Path Validator
Time Stamper Class
LoggerCLS
HTA
Keyword Ranking
DOM Explorer
HTA-Notepad
PixyPortManager
Other
flashMessage
Kill Popup
VBE decoder (fixed)
Error Codes
Maze generator
Char counter
HTML To Word
ICQ Choose User
ScreenSaver Password decoder
Mp3Playlister - singleList
Long Filename To Short
Trace Math
Dump Hexa File
Self modifying script
Mp3Playlister - multiList
HTANoid
PixyWebServer
Python
Progress indication

©2002 Jean-Luc Antoine. All Rights Reserved. Scripts or any other material on this website may not be redistributed or put as part of ANY collection (script archives, CDs etc) without prior written permission. Permission granted to use and modify any of the scripts found on InterClasse.com