Vous êtes sur la page 1sur 17

Introduction batch: Exemple de script de sauvegarde compressée

Introduction

Objectifs

Cette note de synthèse a pour but, de présenter et d'initier à la programmation batch, tout
en se penchant sur l'étude d'un script réalisé en entreprise.
Ce langage connu de nom, que j'ai pu apprendre et palper durant mon stage, a su me plaire
tant par sa simplicité et que par sa robustesse.
Ce fut pour moi, comme un bond dans le passé, du temps de l'informatique à ses débuts. C'est
cela, qui m'a poussé à en faire le sujet de ma note de synthèse, plutôt que de choisir mon
autre projet de stage de réalisation de pages web dynamiques.
Coup de coeur envers les nombreuses facéties de cet ancien langage.

La sauvegarde chez les Entreprises

Dans chaque entreprise, la sauvegarde des données est essentielle voire capitale pour sa
survie.
Ainsi, la sauvegarde est un problème, mais surtout un problème de poids qu'il nous faut
traiter.
Durant mon stage, je fus confronter à ce problème et mon objet de stage fut de pouvoir
élaborer un script permettant de sauvegarder les données d'un utilisateur, tout en compressant
ces dernières, afin d'en réduire l'espace utilisé sur le disque de stockage.
User du batch pour la réalisation, c'est faite suite à une discussion avec ancien élève,
aujourd'hui professeur, qui me dit « Pourquoi pas utiliser le batch ? ».

1. Apprendre ... toujours apprendre.

1.1. Introduction au DOS

Le DOS (« Disk Operating System ») est un OS (Operating System => système


d’exploitation). Comme tout système d’exploitation, c’est un programme permettant de
fournir la base des services indispensables à la gestion d’une machine. Sa version la plus
commercialisée est celle de Microsoft, MS-DOS, qui a vu le jour en 1981 lors de son
utilisation sur un IBM PC.
Celui-ci est constitué de trois fichiers vitaux qui sont Io.sys, Msdos.sys et Command.com.

La communication vers le système se fait à l’aide de commandes. Cette communication exige


un vocabulaire et une syntaxe précise, afin que le DOS puisse interpréter et effectuer les
tâches que l’utilisateur demande.

COMMAND PARAMÈTRE OPTIONS

Exemple de commandes:
Sous Sous
Commandes Propriété
Windows 98 Windows_NT
Affiche et Modifie le répertoire
Cd X X
courant.
Liste les fichiers et répertoires et
Dir X X
sous-répertoires.
Del X X Supprime les fichiers.
Copy X X Copie des fichiers.
Cls X X Nettoie l'écran.
Modifie les couleurs de la
Color X
console.
Format X X Formate un lecteur disque.
Affiche des informations sur les
Help X
commandes.
Affiche le chemin d'accès des
Path X X
fichiers exécutables.
Copie des fichiers et des
Xcopy X X
répertoires.
**Windows_NT se trouve Windows 2000,XP,NT

Pour Windows 95/98, l'aide du dos se trouve dans le répertoire oldmsdos du dossier other.

Pour exécuter une commande, il suffit de taper la commande à partir du terminal, puis
d'appuyer sur "ENTRÉE".
Accéder à MS-DOS ou à l’émulateur DOS :

Windows 98: Poste de Travail => exécuter => Taper : command


Windows 2000, XP: Poste de Travail => exécuter => Taper : CMD.
Pour sortir de la console DOS, taper : EXIT.

1.2. Qu'est ce que le batch ?

Historiquement et par définition le Batch : « Fournée » , « Paquet »:

Le terme vient du temps oú on programmait les ordinateurs avec des cartes perforées,
qu'on donnait à l´administrateur par paquets en espérant que tout fonctionne bien.

Traitement par lots.

C'est un fichier contenant un ensemble de commandes qui seront traitées


automatiquement comme si elles étaient entrées au clavier par l'utilisateur, les unes après les
autres. Contraire exact de l'intéractivité.

C'est un fichier ASCII (texte non mis en forme) contenant une ou plusieurs commandes du
système d'exploitation. Le nom de fichier d'un programme de commandes possède une
extension .cmd ou .bat pour Windows ou .sh pour linux. Lorsque vous tapez le nom de fichier
á l'invite de commandes ou lorsqu'un programme de commandes est exécuté á partir d'un autre
programme, ces commandes sont traitées de manière séquentielle. Les programmes de
commandes sont également appelés fichiers de commandes.
L'intérêt des batch est donc d'automatiser des tâches répétitives effectuées sous DOS.

1.3. Le langage batch

Un fichier Batch n'est rien de plus qu'un fichier texte contenant des commandes MS-DOS ;
ainsi une connaissance DOS est requise pour effectuer une programmation batch. Pour que
ces instructions soient compréhensibles, il nous faut user d’un vocabulaire adéquate et
ordonné.

Quelques commandes:

ECHO: C'est une commande de sortie comme printf en langage C, mais aussi de
désactivation.
En effet, lors de l'exécution d'un batch toutes les commandes sont affichées. Afin de pallier à
l'affichage de celles-ci, on rajoute un off. Ce qui donne: echo off . Grâce à cela, les
commandes ne sont désormais plus visibles. Cependant, la commande echo off elle, l'est
toujours. ...:oO ...
Ainsi, l'astuce pour pouvoir la rendre invisible est de lui rajouter un @ qui va masquer la
commande qui le suit.
@ echo off

REM: Cette commande nous permettra de faire des commentaires


En programmation, les commentaires sont presques " vitaux ". Un code bien commenté
facilite la lecture et le débuggage.

PAUSE: Comme son nom l'indique, permet de " break " son programme, ce qui peut
nous être utile afin de visualiser le résultat de notre travail ou intéressant pour un débuggage
ligne par ligne.

GOTO: Cet outil va permettre d'effectuer des sauts inconditionnels. Ainsi, possibilité de
faire des boucles ou encore sauter de parties de programme qui ne nous intéressent pas.

LABEL: C'est le nom de l'arrivée du saut.


N.B: Éviter les labels de même nom.

rem Petit exemple de boucle


@ echo off
rem Désactive l'affichage des commandes pour tout le script
:encore
rem Définition du label
echo la programmation c'est fun !
rem Affichage du texte
goto encore
rem Boucle, saut vers le label spécifié
IF: Commande permettant d'introduire des conditions de le fichier batch. Elle nous fait
réellement sentir que nous sommes programmeur, celui qui peut faire tout faire à son
ordinateur.
Son principe étant, si cette action se déroule comme nous le voulons, alors je passe à autre
chose. Ainsi, un sentiment de contrôle sur le cours du programme.
À notre IF, d'autres conditions peuvent se rajoutées: IF NOT, IF EXIST, IF NOT EXIST.

CHOICE: Cette commande va nous permettre d'attendre un caractère saisi au clavier,


comme un getchar en programmation C.
Grâce à ce dernier, l'élaboration de petit menu devient possible, du même style que les menus
en langage C avec des switch.
N.B: La commande CHOICE n'existe pas dans les systèmes_NT.

ELSE: Nouveauté présente que sur les OS_NT, elle représente un véritable bond en ce
qui concerne la programmation batch.
Nous permet ainsi, d'effectuer une action si la condition du IF n'est pas satisfaite.

rem Exemple:
@ echo off
rem Désactive l'affichage des commandes pour tout le script.
if exist e:dir
rem si le lecteur e: existe, alors je liste l'ensemble de ses fichiers, répertoires, sous-
répertoires.
else exit
rem Sinon je ferme la console.

|: Se nomme « pipe », il s'agit d'un caractère de redirection


Il va alors, rediriger la sortie d'une commande vers l'entrée d'une autre. Elle s'avère très utile
pour mettre en place un système de réponse automatique.

rem Exemple:
@ echo off
rem Désactive l'affichage des commandes pour tout le script.
echo n|format e: /Q
rem la sortie de echo "n" est redirigé à l'entrée de la commande format, ici on procèdera à
une annulation de formatage automatique.

Pour une meilleure compréhension de ces outils je vous invite à visualiser le petit exemple
situé dans la troisième partie de cet article.

2. Environnement utilisateur en entreprise

2.1. Étude

Bien qu’étant les fruits d’une même entreprise, victime du temps, les systèmes Windows
95, 98 n’ont pas les possibilités des systèmes Windows_NT (Windows NT, Windows 2000,
Windows XP). Cela se remarque dès l’installation. Les OS_NT vous demandent de choisir
entre un système de fichiers connu sous 98, le FAT 32 et un autre, le NT FS.
De ce fait, l’arrivée des systèmes NT a permis l’apparition d’un système de fichiers (ntfs)
étant á la fois plus sécuritaire et meilleur gestionnaire de l’espace disque que son prédécesseur.
Aussi, afin d’effectuer notre script, nous devons déjà prendre en compte tous ces paramètres.
La démarche pour une sauvegarde compressée de données ne sera pas la même qu’il s’agisse
d’environnement NT ou 98. Il faudra songer á assurer une certaine compatibilité.
Sur les systèmes NT, la réalisation du script en fichier batch s’avérera plus simple.
En effet, sur ses Operating System, un outil de compression est déjá disponible.
Il suffira d’insérer dans notre code la commande compact afin d’effectuer une compression.

Les utilisateurs de Windows 98, eux, ne disposent pas de cet outil. Une aide d’un logiciel
tierce de compression serait envisageable. Ainsi, il nous faut rechercher un logiciel efficace,
exécutable sous dos au moyen d’une simple commande, de licence pas très onéreuse; les plus
connus WinRar et PKZIP.

2.2. Synchronisation des postes clients et du serveur de sauvegarde

Le principe de sauvegarde de données des utilisateurs fonctionne de la façon suivante :


Les utilisateurs placent le plus souvent leur fichier, leur dossier dans leur répertoire « Mes
Documents ». Aussi, sur leur demande, le script de sauvegarde compressée devra stocker ses
données sur un disque de sauvegarde, présent sur un serveur distant. Pour se faire, afin d’être
efficace et rapide il devra comparer les fichiers, selon leur date de dernière modification.
Aussi, dans les systèmes Windows, une commande exécutable sous MS-DOS permet de le
faire: XCOPY avec les bons attributs. Afin de permettre à cette commande un environnement
de travail optimal, et ainsi éviter de nombreux bugs dans les phases de test, il serait
préjudiciable de synchroniser l’heure du serveur avec celle des postes clients.

EXEMPLE:
L’étude d’un exemple concret, nous permettra de rendre plus imagé cette démarche.
Notre parc informatique possède un serveur NT 4.0 sur lequel se trouve un disque de
sauvegarde et des machines clientes fonctionnant sous Windows 2000 pro et XP pro. Pour
accéder au disque de sauvegarde, nous userons de U:, et pour une machine cliente disons C:.

Imaginons maintenant que l’heure de notre serveur possède, admettons 20 minutes de retard,
sur l’heure d’une des machines clientes. Supposons que les utilisateurs aient un droit de
modification sur leurs fichiers directement sur le disque (U:) de sauvegarde. Nous sommes
alors en face d’une situation « dangereuse ». Ainsi, ces heureux utilisateurs ou groupes
utilisateurs de cette machine risquent d'avoir quelques mauvaises surprises au niveau de la
sauvegarde (pleures et grincements de dents sont au rdv :o( ).

Disons que l’utilisateur avec pouvoir sauvegarde ses documents, contenus dans son C:, sur le
U:. Cependant, comme par hasard, en accédant au U: pour vérifier son travail, il s’aperçoit
d’une erreur. Il la rectifie alors, depuis le U:, puis retourne de suite à son poste. S’il utilise le
script à cet instant … Pouf !!! … boulette :oO !!

En effet, la commande XCOPY effectue une comparaison au niveau de la date de dernière


modification. La machine cliente et le serveur n'ayant pas les mêmes horaires, et la
modification ayant été effectuée dans un laps de temps inférieur à 20 minutes, XCOPY
croyant bien faire, remplacera certains fichiers qu’elle n’aurait pas du. Elle remplacera le
fichier contenu dans le U: par celui du même nom se trouvant sur le C:, puisque c'est celui-ci
qui possède la date de dernière modification connue.

Schéma récapitulatif:

1: 14h50 sur le client => première sauvegarde du code du programmeur.


15h00 sur le serveur => modification sur le serveur.

2: 2ème sauvegarde.
(15h00 - 20min de retard) = 14h40 < 14h50
L'heure de dernière modification connue étant plus récente sur le client que celle du
serveur, la modification effectuée sur le serveur n'est pas prise en compte.
Il y a donc remplacement et perte de données !!

Afin de pallier à ce problème, il faudrait peut être songer, pour les utilisateurs ayant un
compte de domaine, à basculer sur un profil itinérant, plutôt que local. Ce qui permettrait aux
machines clientes et au serveur d’avoir le même horaire, et d’interdire le réglage de l’heure à
l’utilisateur, par Access Control List (ACL : contiennent les permissions associés aux objets «
Serveur Windows 2000 »).

2.3. Les Variables


Comme tout langage de programmation, le batch permet d’utiliser des emplacements
mémoire pour stocker des informations : les variables. Celles-ci sont nommées, définies, voire
modifiées et nous permettent de manipuler facilement des données. En effet, les variables sont
très utiles dans les scripts, en allègent l’écriture et facilitent grandement la vie du
programmeur. Lors de la définition des variables, il n’est pas indispensable de se casser la tête
sur la casse, elle se trouve être non-discriminatoire pour le DOS.
Afin de déclarer, initialiser, modifier, supprimer des variables, nous faisons appel à la
commande SET.

set nom_variable = valeur

Exemple:
J’aimerais initialiser une variable avec le nom Kathy, … :oO, ce n’est pas trop compliqué:
set nom = Kathy
rem Nom possède la valeur Kathy.

Pour utiliser notre variable dans le script, on lui rajoutera désormais des %.
Ainsi, pour afficher la valeur de la variable à l’écran, nous mettrons dans notre batch :

rem Petit fichier batch d'affichage de contenu de variable


@echo off
set nom=Kathy
rem affichage d'une ligne vide
echo.
rem affichage du contenu de la variable
echo %nom%

Astuce: Pour supprimer celle-ci, nous mettrons


rem on initialise avec rien
set nom=

Voilà :o) .

Cependant, le plus intéressant quand nous devons faire des scripts, c’est bien les variables
d’environnement. Pour en avoir fait l’expérience, je vous assure qu’elles facilitent nettement
le travail du programmeur. Il existe deux types de variables d'environnement, système et
locales, qui définissent le comportement de l'environnement de l'interpréteur de commandes
ou l'environnement complet du système d'exploitation. Les variables d'environnement
système sont prédéfinies dans le système d'exploitation. Les variables d’environnement
peuvent être visualisées au moyen de la commande SET, à l’invite de commande.

C:>SET

Elles sont intéressantes, certes car elles vous permettent de ne pas écrire des chemins
d’accès à des fichiers d’une longueur à vous faire pâlir, ou d’accéder au Path pour permettre
de lancer des compilations java (par exemple). Néanmoins, lors de la réalisation de votre
script en entreprise, il s’avérera qu’il soit compatible avec les operating system de celle-ci.
L’évolution vers des systèmes NT, a fait du coup évoluer le nombre de variables
d’environnement disponibles. Ainsi, Windows XP ou 2000 possèdent le double des variables
disponibles chez 95/58. C'est-à-dire, la facilité dont vous faîtes preuve pour scripter sur les
OS_NT, vous fera grincer des dents en adaptant pour 95/98.

Quelques variables d’environnement disponibles:

Présent
Variable Fonction
sur:
Renvoie l'emplacement auquel les applications stockent
Appdata Win 98,NT
les données par défaut.
Os Renvoie le nom du système d'exploitation. Win NT
Spécifie le chemin pour la recherche des fichiers
Path Win 98,NT
exécutables.
Tmp & Temp Renvoie les répertoires par défaut temporaires utilisés. Win 98,NT
Username Renvoie le nom de l'utilisateur qui a ouvert une session. Win NT
Renvoie l'emplacement du profil de l'utilisateur en
Userprofil Win NT
cours.
Contenant l'adresse du répertoire démarrage de
Winbootdir Win 98
Windows.
Renvoie l'emplacement du répertoire du système
Windir Win NT
d'exploitation.

3. Place à la pratique

3.1. Exemple

Afin de rendre plus attractif cet article, nous allons effectuer un script ayant à peu près le
même principe que celui réalisé en entreprise. Néanmoins, cet automate ne fonctionne que sur
les systèmes NT (FS : NTFS). Vous pourrez appeler ce script, soit à partir de votre terminal en
utilisant la commande CALL (permettant d'appeler des fichers batch) et lui rajouter des
paramètres (le nom de votre fichier ou dossier contenu dans « Mes Documents », la lettre du
lecteur sur lequel vous voulez le sauvegarder), soit en double cliquant sur votre batch ; celui-
ci sauvegardera tout en compressant votre dossier « Mes Documents » dans votre lecteur
principal C:.

Exemple d'utilisation:
Les paramètres se placent derrière la ligne de commande, appelant votre batch et sont séparés
par des espaces.
Astuces: pour mettre un paramètre contenant des espaces dans son nom, nous lui aposeront
des parenthèses.
rem il nous faut écrire de la façon suivante:
rem ligne de commande paramètre_1 paramètre_2 paramètre_3
call nom_du_batch "votre pseudo" "nom du fichier" lettre_du _lecteur:
Code:

rem désactivation de l'affichage des commandes


@echo off
rem nettoyage de l'écran
cls
rem saut de ligne
echo.
rem affichage du titre
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º º
echo º BIENVENUE º
echo º º
echo »ÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
rem test pour connaitre l'OS si la condition
rem est vérifiée alors saut vers le label spécifié
if (%OS%)==(Windows_NT) goto mouahaha
rem sinon affichage du texte
echo Ce n'est pas un systŠme NT
rem temps d'arrêt
pause
rem sortie
exit
rem définition d'un label
:mouahaha
rem changement de couleur
color 1F
rem si le premier parametre n'est pas vide
rem alors je saute vers le label: nom
if ("%~1")==("") goto nom
rem changement du titre de la fenêtre
rem avec la valeur du premier paramètre
title %~1
rem affichage du pseudo
echo Bien le bonjour … toi: %~1
echo.
rem temps d'arrêt
pause
goto saut
:nom
rem titre de la fenêtre avec le nom
rem de l'utilisateur de session
title %username%
echo Bien le bonjour … toi: %username%
pause
:saut
echo.
rem test de tous les paramètres
echo pseudo: %~1
echo nom de fichier: %~2
echo lecteur: %3
echo.
pause
cls
rem test de connaissance du paramètre nom de fichier
if("%~2")==("") goto tout
rem test pour savoir s'il y a un lecteur spécifié
else if not (%3)==() cd %3
rem création d'un nouveau dossier
if not exist %3\save972 md %3\save972
rem définition et initialisation de variable
set ok = %3\save972
cd %userprofile%\"Mes Documents"
rem sauvegarde du fichier spécifié
xcopy .\%~2 %ok% /y/e/r/h/d
rem sauvergarde carnet d'adresse
if exist %appdata%\Microsoft\"Address Book" cd %appdata%\Microsoft\"Address Book"
xcopy .\%username%.wab %ok% /y/e/r/h/d
cls
echo phase de compression
rem compression
compact %ok% /C /S /A /I
echo sauvegarde effectu‚e avec succŠs !!
echo Aurevoir %~1 ¤_¤
pause>nul
rem retour à la fenetre DOS
goto :eof
:tout
if not exist c:\save972 md c:\save972
set save = C:\save972
rem sauvegarde de mes documents
cd %userprofile%\"Mes Documents"
xcopy .\*.* %save% /e/y/r/d/h
rem sauvergarde carnet d'adresse
if exist %appdata%\Microsoft\"Address Book" cd %appdata%\Microsoft\"Address Book"
xcopy .\%username%.wab %save% /y/e/r/h/d
cls
echo phase de compression
compact %save% /C /S /A /I
echo sauvegarde effectu‚e avec succŠs !!
echo Aurevoir %~1 ¤_¤
pause>nul
goto :eof

Conclusion

Pour conclure, le batch est un langage de pogrammation très pratique et simple pour nous
permettre d'automatiser certaines tâches.

En entreprise, il s'avère très efficace, pour effectuer des tâches de sauvegarde.

Cependant, la diversité des Operating System en entreprise, peut représenter un frein lors
du déploiement final.

2. Les scripts batchs à coder

Basiquement, un fichier batch n'est rien de plus qu'un fichier texte contenant des commandes
MS-DOS, et possédant le suffixe ".bat". Nous allons donc faire une bref récapitulatif de
quelques commandes avant de nous intéresser aux deux scripts qui vont permettre
l’installation centralisée de notre application.

2.1. Les principales commandes batch

• CD : permet de naviguer dans une arborescence.


o CD \ : revient à la racine du disque.
o CD "c:\start menu" : se place dans le dossier c:\start menu.
o CD .. : permet de revenir au dossier précédent.
• REM ou « :: » : permet de placer des commentaires dans son code. Exemple : REM ---
Ceci est un commentaire.
• SET : initialisation d’une variable. Exemple : SET var=titi (la var sera ensuite
réutilisée avec %var%)
• ECHO : permet d’écrire une chaîne de caractère a l’écran ou de la rediriger dans un
fichier texte grâce au signe « > ». Exemple : ECHO Texte redirigé dans un txt >
c:\temp\test.txt
• REN : permet de renommer un fichier. Exemple : REN old.txt new.txt
• ":" : Annonce le début d’un label. Le nom ne doit pas dépasser 8 lettres (si le nom du
label dépasse 8 lettres, seules les 8 premières lettres seront prises en compte), et ne pas
être composé d'espaces. La différence majuscule/minuscule n’est pas prise en compte
pour les labels et les Goto. Exemple :
:fontion
echo Nous sommes dans la fonction.
• GOTO : Permet d’aller à la fonction appelée. Exemple :
GOTO test
:test
echo Vous avez été redirigé vers la fonction test
• Un batch peut recevoir jusqu’à neuf paramètres. Ceux-ci sont stockés dans 9 variables
notées %1 à %9. Contrairement aux variables classiques, on observe 3 grosses
différences : on ne peut pas les modifier, elles ne sont pas encadrées par 2 « %
» (seulement précédés d’un seul « % »), enfin, elles sont spécifiques pour chaque
batch. Exemple : Soit le batch suivant : Monbatch.bat
@echo off
echo Le premier paramètre est %1
echo Le second paramètre est %2
On le lance ensuite avec la commande : C:\Tests\Monbatch.bat /V ABC.EXE
Ce qui donne :
@echo off
echo Le premier parametre est /V
echo Le second parametre est ABC.EXE
• CALL : permet d’appeler un fichier extérieur (un .exe ou un .bat par exemple).
Exemple : CALL \banner.bat
• COPY ou XCOPY: Permet de copier des fichiers et des dossiers (XCOPY a le même
rôle que COPY mais possède plus d’options)
• "Nul" représente un périphérique virtuel inexistant. Utilisé avec ">" et ">>", il permet
d'écrire" le résultat de commande vers rien du tout, c’est-à-dire, en clair, de les
masquer. La commande à gauche de « > nul: » est exécutée correctement, mais son
résultat n’est pas affiché.
• ">" et ">>" : Les redictions permettent d’envoyer des chaînes de caractères dans des
fichiers texte par exemple. Ces deux symboles sont très utilisés pour faire une log lors
d’une installation. Le « > » crée le fichier s’il n’existe pas et écrit au début. Le « >> »
quant à lui écrit à la suite du fichier texte.
• "|", "||", "&" et "&&" : Les expressions conditionnelles permettent de simplifier
énormément une ligne de code car il peut lier une action e fonction du résultat de la
première.
o "|" : Permet d’utiliser le résultat de la première opération en entrée pour la
seconde
Exemple : ECHO y| CACLS %SystemRoot%\%%~nxi /c /p administrators:f
system:f users:r > nul:
o "||" : Permet d’exécuter la deuxième opération uniquement si la première a
échoué.
o "&" : Permet d’exécuter la deuxième opération après la première quel que soi
le résultat de celle-ci.
o "&&" : Permet d’exécuter la deuxième opération uniquement si la première a
réussi.
• DEL : permet de supprimer un ou plusieurs des fichiers. Exemple : DEL c:\temp\test
Dans ce cas il faudra ensuite confirmer par y (yes) pour que la commande
s’accomplisse. Afin d’éviter cette étape supplémentaire, on peut écrire :
@ECHO OFF
ECHO o|DEL c:\temp\test > nul:
• MKDIR : permet de créer un répertoire
• CACLS : permet de régler les droits d’accès sur des dossiers. Exemple : cacls
%SystemRoot%\Winnt /c /p administrators:f system:f users:r > nul:
• Le batch peut utiliser des boucles for et des actions conditionnelles if comme en
langage C qui permet par exemple de gérer l’installation de certaines applications en
fonction de l’OS (if %OS% ==nt4...)

2.2. Le fichier updatelocal.cmd

Le fichier updatelocal.cmd local doit être présent sur chaque serveur susceptible d’être mis à
jour. Il permet de "mapper" le serveur d’installation et d’aller récupérer les logiciels à l’aide
d’une simple commande. "update nom_logiciel" vérifie si le fichier est installé ou non et
renvoie un message dans la fenêtre du type : "Administration Kit seems to be already
installed" ou "Macromedia Flash Player not installed", "update nom_logiciel on" permet de
lancer l’installation (après avoir vérifié que le package n’etait pas déjà présent sur la
machine). Il faudra bien entendu se placer dans le dossier ou vous avez placé le fichier avant
de lancer la commande sauf si le fichier est présent dans le "path" d’origine (par exemple :
C:\Winnt ou C:\Winnt\System32). Voici donc le updatelocal.cmd :

@ECHO OFF

REM --- Some default settings


REM ---
SET MASTER_DRIVE=X:
SET MASTER_SHARE=\\srvinstall\soft
SET MASTER_USER=srvinstall\Administrator

REM --- Make sure we are not on the %MASTER_DRIVE% drive


REM ---
cd /d %SystemDrive%\

REM --- Unmount %MASTER_DRIVE% drive


REM ---
IF exist %MASTER_DRIVE% NET USE %MASTER_DRIVE% /d > nul:

REM --- Mount %MASTER_SHARE% on %MASTER_DRIVE%


REM ---
TITLE NT Setup: Mounting %MASTER_SHARE% on %MASTER_DRIVE%...
NET USE %MASTER_DRIVE% %MASTER_SHARE% /user:%MASTER_USER%
/persistent:no

REM --- Start update


REM ---
REM --- Stop Norton Services during installation
REM ---
SCLIST -r | FIND /i "Norton Antivirus Server" > nul: && NET STOP "Norton Antivirus
Server " > nul:
TITLE NT Setup: Running server side script...
CALL %MASTER_DRIVE%\updatesrv.cmd %1 %2 %3 %4 %5
REM --- Restart Norton Services after installation
REM ---
SCLIST -s | FIND /i "Norton Antivirus Server" > nul: && NET START " Norton Antivirus
Server " > nul:
goto :eof

Pour que le service Norton puisse se stopper, il est indispensable que le nom du service
corresponde au nom renseigné dans le script. Si le service s’appelle "NAV Corporate Edition",
celui-ci ne pourra pas être arrêté et il se peut que la mise a jour rencontre des problèmes. De
plus, la version ci-dessus est très simplifiée et on peut par exemple rajouter des tests comme
un ping du serveur d’installation. Si la machine ne répond plus, ce processus permettrait de
basculer sur une machine de secours.

2.2. Le fichier updatesrv.cmd

Le fichier updatesrv.cmd du serveur d’installation contient les scripts nécessaires à la mise en


place des applications. En voici une brève présentation :

• La variable UPDATE_SOFTWARE correspond à la liste des applications disponibles


séparées par un espace. Elle peut être mise à jour très facilement par la suite.
• Le script va ensuite rechercher un chaîne de caractère dans la version de l’OS et dans
un clé de registre particulière ce qui permet par la suite de distinguer une installation
en fonction de la version de l’OS et de ses spécificités (srv, tse, etc.). Cette méthode se
révèle très pratique lorsque le logiciel n’est compatible qu’avec un seul OS ou que les
clés de registre à modifiées sont différentes.
• Le label :install appelle ensuite le label correspondant au premier argument rentré par
l’administrateur (le nom du logiciel à mettre à jour) qui lance ensuite son installation.
Dans l’exemple ci-dessous, l’installation consiste simplement à copier le contenu d’un
dossier vers C:\Winnt et de redéfinir les droits sur les dossiers copiés par sécurité.

@ECHO OFF

REM --- Software list


REM ---
SET UPDATE_SOFTWARE=reskit

REM --- Which OS ?


REM ---
VER | FIND /i "4.0" > nul: && (
SET OS=NT4
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"ServerNT" > nul:) && (SET NT=srv)
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"Enterprise" > nul:) && (SET NT=ese)
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"Terminal" > nul:) && (SET NT=tse)
)
VER | FIND /i "2000 [Version 5.0" > nul: && (
SET OS=W2K
SET COPY_OPTIONS=/y
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"ServerNT" > nul:) && (SET NT=srv)
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"Enterprise" > nul:) && (SET NT=ase)
(REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" | FIND /i
"TSAppCompat" | FIND /i "0x1" > nul:) && (SET NT=tse)
)
VER | FIND /i "2000 [Version 5.1" > nul: && (
SET OS=2k3
SET COPY_OPTIONS=/y
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"ServerNT" > nul:) && (SET NT=srv)
(REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions | FIND /i
"Enterprise" > nul:) && (SET NT=ase)
(REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" | FIND /i
"TSAppCompat" | FIND /i "0x1" > nul:) && (SET NT=tse)
)

TITLE NT Setup
FOR %%i IN (%UPDATE_SOFTWARE%) DO IF /i "%1" == "%%i" GOTO install
GOTO help

REM --- Beginning install


REM ---
:install
SET MSG=Updating software
ECHO %MSG%
CALL :%1 %2 %3 %4 %5
GOTO :eof

:help
CLS
TITLE NT Setup
ECHO Usage: update [option [suboption...]]
ECHO where [option] is one of the following "system" (1/1):
ECHO reskit [on] : Resource Kit Utilities
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
PAUSE

REM --- Resource Kit Utilities


REM ---
:reskit
SET MSG=Administration Kit
TITLE Updating system: %MSG%...

REM --- Check install


REM ---
IF /i "%1" == "on" GOTO install_reskit
FOR %%i IN (%MASTER_DRIVE%\ResKit\%OS%\*.*) DO IF not exist
%SystemRoot%\%%~nxi GOTO install_reskit
FOR %%i IN (%MASTER_DRIVE%\ResKit\%OS%\System32\*.*) DO IF not exist
%SystemRoot%\System32\%%~nxi GOTO install_reskit
ECHO %MSG% seems to be already installed!...
GOTO secure_reskit

REM --- Install


REM ---
:install_reskit
IF /i not "%1" == "on" (ECHO %MSG% not installed!& GOTO :eof)
XCOPY %MASTER_DRIVE%\ResKit\%OS%\*.* %SystemRoot% /e /c /i /q /h /r
%COPY_OPTIONS% > nul: 2> nul:
ECHO %MSG%...

REM --- Secure directory and file permissions


REM ---
:secure_reskit
FOR %%i IN (%MASTER_DRIVE%\ResKit\%OS%\*.*) DO ECHO y| CACLS
%SystemRoot%\%%~nxi /c /p administrators:f system:f users:r > nul:
FOR %%i IN (%MASTER_DRIVE%\ResKit\%OS%\System32\*.*) DO ECHO y| CACLS
%SystemRoot%\System32\%%~nxi /c /p administrators:f system:f users:r > nul:
GOTO :eof
Voici l’arborescence du serveur d’installation. Il est indispensable que le répertoire soft soit
partagé sur le réseau avec les droits appropriés afin que les autres machines puissent y accéder
pour leur mise a jour (au moins read et execute pour le compte utilisé pour l’installation). On
remarque le fichier "updatesrv.cmd" est mis à la racine de soft tandis que chaque application
possède son répertoire propre.