Aller au contenu principal

VBS - Script d'auto-mise à jour

Automatisez les mises à jour de vos scripts console VBS (Visual Basic Script) ! Découvrez comment créer un fichier VBS qui se met à jour lui-même, se connecte à GitHub, vérifie les nouvelles versions et s'écrase.

· 2 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

VBS - Script d'auto-mise à jour

⚡
TL;DR

Cet article montre comment donner à un fichier VBScript (VBS) la capacité de se mettre à jour lui-même : à chaque exécution, le script télécharge son propre code source depuis une URL GitHub publique, la compare à la copie locale et s'écrase si une version plus récente est trouvée — ce qui permet aux utilitaires .vbs distribués de rester à jour sans redistribution manuelle.

Avant de passer à WSL2 et à la console Linux, j'écrivais des scripts VBS de temps en temps. Ça ressemble à du VBA, mais pour la console DOS.

Un script VBS pour DOS est un fichier texte écrit dans le langage de programmation Visual Basic Scripting Edition (VBScript), exécutable directement depuis la ligne de commande DOS. Il permet d'automatiser des tâches et d'effectuer des opérations répétitives sur votre ordinateur.

C'est exactement comme les scripts Linux Bash, mais pour DOS.

Trois de mes utilitaires VBS qui bénéficieraient précisément de ce mécanisme d'auto-mise à jour : VBS - Récupérer la liste des champs d'une base de données MS Access, Exporter les objets MS Access et VBS - Obtenir la liste des fichiers et générer un CSV.

Pensez-vous qu'il serait possible de proposer une fonction d'auto-mise à jour dans de tels scripts ? La réponse est oui.

Imaginez un script appelé get_folder_size.vbs que vous avez publié publiquement sur GitHub (source https://github.com/cavo789/vbs_utilities/blob/master/src/folders/get_folder_size/get_folder_size.vbs).

Quelqu'un le télécharge sur son ordinateur et prend plaisir à l'utiliser.

En y ajoutant une nouvelle fonction d'auto-mise à jour, à chaque démarrage du script, une connexion à GitHub est d'abord établie, le script est téléchargé depuis là, et une vérification est faite pour voir si la version téléchargée est différente ; si c'est le cas, le script s'écrase lui-même.

Voici le contenu d'une telle fonction :

' -----------------------------------------------------------------
'
' Connect to GitHub, get the raw version of a file and download it
'
' The script will check for newer version on GitHub and if
' there is one, the script will overwrite himself with
' that newer version.
'
' Based on a script of
' @author Michi Lehenauer §https://github.com/michiil)
' then modified by Christophe Avonture
'
' @src https://github.com/michiil/vbs_scrips/blob/master/WZV-Excel.vbs
' -----------------------------------------------------------------
' The content to download
url = "https://raw.githubusercontent.com/cavo789/vbs_utilities/master/src/folders/get_folder_size/get_folder_size.vbs"
Set req = CreateObject("Msxml2.ServerXMLHttp.6.0")
req.setTimeouts 500, 500, 500, 500
' If you're behind a firewall, uncomment the following line
' and mention the proxy address and port
'req.setProxy 2, "your.proxy.net:8080", ""
req.open "GET", url, False
req.send
If Err.Number = 0 Then
If req.Status = 200 Then
' Get the content, just downloaded
downloadedContent = req.responseText
' Get the original content, this script
scriptName = wScript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set textFile = objFSO.OpenTextFile(scriptName, 1)
originalContent = textFile.ReadAll
textFile.Close
' Compare if the two contents are different
If (originalContent <> downloadedContent) Then
' If yes, for instance, rewrite this script by
' the new content ==> auto-update
Set textFile = objFSO.OpenTextFile(scriptName, 2)
textFile.Write (downloadedContent)
textFile.Close
'wScript.echo scriptName & " has been updated"
End If
Set textFile = Nothing
Set objFSO = Nothing
End If
Else
' Ok, in case of error, don't panic, just do nothing
Err.Clear
End If

Ce script télécharge une version d'un fichier depuis GitHub et la compare avec la version locale du script lui-même. Si le contenu téléchargé est différent, le script se remplace automatiquement avec la nouvelle version, réalisant ainsi une auto-mise à jour.


Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?