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 :

  1. Ouvrez l'Invite de commandes (cmd.exe)

  2. 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 :

  1. Allez dans Paramètres → Applications → Fonctionnalités facultatives

  2. 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 FileSystemObjectWScript.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