Tutoriel: Windows Scripting Host (WSH) pour l'automatisation
Introduction à Windows Scripting Host (WSH)
Windows Scripting Host (WSH) est une technologie Microsoft intégrée aux systèmes d'exploitation Windows qui permet d'exécuter des scripts directement sur le système, sans avoir besoin d'un navigateur web ou d'un serveur. Contrairement aux macros ou aux batch scripts (.bat), WSH prend en charge des langages plus puissants comme VBScript (VBS) et JScript (JS), offrant ainsi une flexibilité accrue pour automatiser des tâches administratives, manipuler des fichiers, gérer des processus et interagir avec d'autres applications.
À quoi sert WSH ?
-
Automatisation système (création/suppression de fichiers, gestion des services Windows)
-
Administration réseau (configuration IP, gestion des utilisateurs Active Directory)
-
Interaction avec des applications (Excel, Word, Outlook via COM)
-
Exécution de scripts en arrière-plan (sans interface utilisateur)
Différences entre WSH et PowerShell
Alors que PowerShell est plus moderne et puissant, WSH reste utile pour :
-
Les anciens systèmes Windows (compatibilité avec Windows 98/2000/XP)
-
Les scripts légers ne nécessitant pas .NET
-
L'intégration avec des applications COM
Dans ce tutoriel, nous verrons comment exploiter WSH pour automatiser efficacement des tâches sous Windows.
Prérequis et configuration de WSH
Avant de commencer à utiliser Windows Scripting Host, assurez-vous que votre environnement est correctement configuré.
Vérification de l'installation de WSH
WSH est intégré par défaut dans toutes les versions modernes de Windows (depuis Windows 98). Pour vérifier sa présence :
-
Ouvrez l'Invite de commandes (
cmd.exe
) -
Tapez :
cscript //h:cscript
Si la commande s'exécute sans erreur, WSH est installé.
Activation de WSH (si désactivé)
Sur certaines versions de Windows (notamment Windows 10/11), WSH peut être désactivé par défaut pour des raisons de sécurité. Pour le réactiver :
-
Allez dans Paramètres → Applications → Fonctionnalités facultatives
-
Recherchez "Windows Script Host" et activez-le si nécessaire.
Outils recommandés
-
Éditeur de scripts : Bloc-notes, Notepad++, ou VS Code (avec extensions VBScript/JScript)
-
Exécution des scripts :
-
wscript.exe
(mode fenêtré, pour les scripts avec interface) -
cscript.exe
(mode console, pour une meilleure gestion des erreurs)
-
Sécurité et permissions
WSH peut exécuter du code potentiellement dangereux. Pour des raisons de sécurité :
-
Ne lancez jamais des scripts
.vbs
ou.js
provenant de sources non fiables. -
Configurez les stratégies d'exécution via
gpedit.msc
(Stratégie de groupe) si nécessaire.
Les langages de script pris en charge (VBScript et JScript)
Windows Scripting Host prend principalement en charge deux langages de script : VBScript (VBS) et JScript (JS). Chacun a ses particularités et cas d'utilisation.
1. VBScript (VBS)
Langage basé sur Visual Basic, souvent utilisé pour l'automatisation Windows et l'interaction avec COM.
Caractéristiques principales :
-
Syntaxe simple et proche du langage naturel
-
Gestion native des objets COM (Excel, Word, WMI, etc.)
-
Meilleure intégration avec les anciens systèmes Windows
Exemple basique :
MsgBox "Bonjour, ceci est un script VBScript !", vbInformation, "Test WSH"
2. JScript (JS)
Implémentation Microsoft de JavaScript, plus orientée vers la programmation structurée.
Caractéristiques principales :
-
Syntaxe similaire à JavaScript/ECMAScript
-
Plus flexible pour la manipulation de données et les structures complexes
-
Moins utilisé que VBScript dans l'écosystème Windows
Exemple basique :
WScript.Echo("Bonjour, ceci est un script JScript !");
Quand utiliser VBScript vs JScript ?
Critère | VBScript | JScript |
---|---|---|
Compatibilité | Meilleure avec les anciens scripts et COM | Plus moderne |
Syntaxe | Plus simple pour les débutants | Plus proche du C/JavaScript |
Performances | Similaire (WSH n'est pas optimisé pour la vitesse) | Similaire |
Exemples pratiques de scripts WSH pour l'automatisation
Maintenant que nous avons vu les bases de WSH, passons à des exemples concrets qui vous permettront d'automatiser des tâches courantes sous Windows.
1. Manipulation de fichiers et dossiers
Créer un fichier texte avec contenu
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile("C:\test\exemple.txt", True)
file.WriteLine("Ceci est un texte écrit par WSH")
file.Close
MsgBox "Fichier créé avec succès !"
Lister les fichiers d'un dossier
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.GetFolder("C:\\Windows");
var files = new Enumerator(folder.files);
while (!files.atEnd()) {
WScript.Echo(files.item().name);
files.moveNext();
}
2. Interaction avec Windows
Redémarrer un service Windows
Set service = GetObject("winmgmts:{impersonationLevel=impersonate}").Get("Win32_Service.Name='Spooler'")
service.StopService()
WScript.Sleep(5000) ' Attendre 5 secondes
service.StartService()
Modifier une clé de registre
var shell = new ActiveXObject("WScript.Shell");
shell.RegWrite("HKCU\\Software\\Test\\Valeur", "Donnée", "REG_SZ");
WScript.Echo("Clé de registre modifiée");
3. Automatisation Office
Créer un document Word
Set word = CreateObject("Word.Application")
word.Visible = True
Set doc = word.Documents.Add()
doc.Content.Text = "Document créé via WSH"
doc.SaveAs("C:\test\document.docx")
word.Quit
4. Tâches réseau
Ping une adresse IP
var shell = WScript.CreateObject("WScript.Shell");
var exec = shell.Exec("ping 8.8.8.8");
while (!exec.StdOut.AtEndOfStream) {
WScript.Echo(exec.StdOut.ReadLine());
}
Problèmes courants et solutions avec WSH
Bien que Windows Scripting Host soit un outil puissant, vous pouvez rencontrer des erreurs fréquentes lors de son utilisation. Voici les problèmes les plus courants et leurs solutions.
1. Erreur : "Script non signé" ou exécution bloquée
Symptôme :
-
Message "Windows a bloqué ce script car il n'est pas signé"
-
Le script ne s'exécute pas, même avec les bonnes permissions
Solutions :
✔ Méthode 1 : Exécuter en mode "bypass" (déconseillé pour les scripts non fiables)
cscript //B votre_script.vbs
✔ Méthode 2 : Modifier la stratégie d'exécution (via gpedit.msc
→ Stratégie de script Windows)
✔ Méthode 3 : Signer le script avec un certificat numérique (via signtool.exe
)
2. Erreur : "ActiveX component can't create object"
Symptôme :
-
Message d'erreur lors de l'utilisation de
CreateObject()
-
Problème fréquent avec
FileSystemObject
,WScript.Shell
, ou COM (Excel/Word)
Solutions :
✔ Vérifier si le composant est enregistré :
regsvr32 scrrun.dll # Pour FileSystemObject
✔ Réinstaller l'application concernée (si erreur avec Office COM)
✔ Exécuter en tant qu'administrateur (si problème de permissions)
3. Script qui plante silencieusement (pas de message d'erreur)
Symptôme :
-
Le script démarre mais ne fait rien
-
Aucun message d'erreur visible
Solutions :
✔ Utiliser cscript.exe
au lieu de wscript.exe
(pour voir les erreurs en console)
✔ Ajouter un gestionnaire d'erreurs en VBScript :
On Error Resume Next ' Permet de continuer malgré une erreur
' Votre code ici
If Err.Number <> 0 Then
MsgBox "Erreur #" & Err.Number & " : " & Err.Description
End If
✔ Vérifier les logs dans l'Observateur d'événements (eventvwr.msc
→ Journaux Windows > Application)
4. Problèmes de performance avec les scripts longs
Symptôme :
-
Le script prend trop de temps à s'exécuter
-
Blocage lors de l'accès à des ressources réseau
Solutions :
✔ Optimiser les boucles et éviter les opérations redondantes
✔ Utiliser WScript.Sleep(ms)
pour éviter la surcharge CPU
✔ Privilégier PowerShell pour les tâches complexes
5. Problèmes de sécurité (scripts malveillants)
Risque :
-
WSH est souvent exploité par des virus/malwares (.vbs en pièce jointe)
Protections recommandées :
✔ Désactiver WSH si inutilisé (via dism.exe /online /Disable-Feature /FeatureName:WindowsScriptHost
)
✔ Ne jamais exécuter des scripts provenant de sources inconnues
✔ Utiliser des outils comme Windows Defender pour analyser les scripts suspects
Bonnes pratiques et sécurité avec Windows Scripting Host
WSH est un outil puissant, mais son utilisation nécessite des précautions pour éviter les risques de sécurité et garantir des scripts efficaces. Voici les meilleures pratiques à suivre.
1. Sécurité : Protéger l’exécution des scripts
✅ Désactiver WSH si inutilisé
Sur les postes sensibles, désactivez WSH pour éviter l’exécution de scripts malveillants :
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings" /v "Enabled" /t REG_DWORD /d 0 /f
(Remplacez 0
par 1
pour le réactiver.)
✅ Ne jamais exécuter des scripts non vérifiés
-
Vérifier la source avant d’exécuter un
.vbs
ou.js
. -
Analyser avec un antivirus si le script provient d’un tiers.
✅ Utiliser des politiques d’exécution restrictives
Configurez les stratégies via gpedit.msc
:
-
Stratégie de script Windows → "Autoriser uniquement les scripts signés".
2. Optimisation des scripts
✅ Privilégier cscript.exe
pour le débogage
-
Affiche les erreurs en console (plus clair que
wscript.exe
). -
Exemple :
cscript //Nologo mon_script.vbs
✅ Gérer les erreurs proprement
En VBScript :
On Error Resume Next ' Continue en cas d'erreur
' Code potentiellement dangereux
If Err.Number <> 0 Then
WScript.Echo "Erreur : " & Err.Description
WScript.Quit(1)
End If
En JScript :
try {
// Code risqué
} catch (e) {
WScript.Echo("Erreur : " + e.message);
WScript.Quit(1);
}
✅ Éviter les boucles infinies et les scripts bloquants
-
Utiliser
WScript.Sleep(1000)
pour limiter la charge CPU. -
Exemple :
Do While True WScript.Sleep(5000) ' Pause de 5 secondes ' Tâche répétitive Loop
3. Alternatives modernes à WSH
Cas d’usage | WSH | PowerShell | Python |
---|---|---|---|
Compatibilité | ✅ (anciens systèmes) | ✅ (Windows 7+) | ✅ (multi-OS) |
Sécurité | ❌ (risque élevé) | ✅ (politiques restrictives) | ✅ (sandbox possible) |
Puissance | ⚠ (limité) | ✅ (accès .NET/WMI) | ✅ (bibliothèques étendues) |
Quand utiliser PowerShell à la place ?
-
Pour des tâches complexes (gestion Active Directory, automation cloud).
-
Pour une meilleure sécurité (exécution de scripts signés obligatoire).
-
Pour un langage plus moderne (pipelines, objets).
4. Maintenance et documentation
✅ Commenter son code
Exemple en VBScript :
' =====================================
' Nom : Script de sauvegarde
' Auteur : Votre Nom
' Date : 2023-10-01
' Description : Copie les fichiers du dossier A vers B
' =====================================
✅ Versionner les scripts
-
Utiliser Git même pour les petits scripts.
-
Éviter les noms génériques (
script1.vbs
→sauvegarde_fichiers.vbs
).
Conclusion
WSH reste utile pour des tâches simples et rapides, mais pour des projets sérieux, PowerShell ou Python sont préférables. En suivant ces bonnes pratiques, vous limiterez les risques et améliorerez l’efficacité de vos scripts.
Publié le: 11 Apr 2025