Automatisation Ghost

Gestion automatisée de salles informatiques

Tristan Fleury

Ce document technique s'adresse à des techniciens en informatique. Il a pour but d'expliquer la mise en œuvre d'une solution complète de descente automatique d'images Ghost dans des salles informatiques uniformisées. La mise en place de cette procédure a pour objectif :

- de pouvoir maintenir efficacement et facilement des salles (labo, libre-service, cours, etc.) sans aucune intervention ;

- de répondre rapidement à des demandes de modification d'images de la part des utilisateurs ;

- d'améliorer la sécurité du parc.

Commentez ♪

- Titre : Automatisation Ghost

- Auteur : Tristan Fleury

- Parution : 5 juin 2011

- Mise à jour : 5 juin 2012

- Public visé :

- Licence : Copyright ® 2012 Viduc. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Prérequis

- 1-A. Introduction

- 1-B. Prérequis

- 1-C. Configuration d'une salle

- 1-D. Préparation des machines

- 1-D-1. Machines déjà installées

- 1-D-2. Machines vierges

- 1-E. Configuration de la salle sur le serveur

- 1-E-1. Arborescence

- 1-E-2. Configuration des machines

- 2. Préparation et configuration des tâches

- 2-A. Arborescence des tâches

- 2-B. Les différentes tâches

- 2-B-1. Tâche 01-Clonage

- 2-B-2. Tâche 02-Login-DSI

- 2-B-3. Tâche 03-Login-Salle

- 2-B-4. Tâche 04-Log

- 2-B-5. Tâche 05-Extinction

- 2-C. Test du processus des tâches

- 3. Planification des tâches

- 4. Problèmes et configurations diverses

- 4-A. Drivers carte réseau et clients

- 4-B. Time Out du serveur

- 4-C. Configuration du domaine et compte de service

- 4-D. Gestion des Logs

- 5. Annexe

- 5-A. Scripts Ghost

- 5-A-1. Login-DSI.vbs

- 5-A-2. Login-User.vbs

- 5-A-3. Verif_Auto_Ghost.vbs

- 6. Conclusion

1 - Prérequis

1-A - Introduction

La première chose à comprendre avant de commencer ce tutoriel est la notion qui se cache derrière les termes « descente automatique d'images ». Le concept d'image est utilisé par quelques logiciels (Macrium Reflect, DriveImage XML, Savepart, O&O DiskImage Express pour Windows et G4U, Kbackup, Partimage pour Linux, entre autres). La société Symantec propose depuis de nombreuses années une solution Norton Symantec Solution Suite (disponible ici) qui offre de nombreuses possibilités. Cette solution n'est pas gratuite, il faut acheter une licence pour chaque poste client (environ 10 € par poste). Elle répond cependant de façon très optimum à un environnement Windows complet (avec domaine) et sera donc utilisée dans ce tutoriel.

Une image est une sorte de « photographie » d'un disque dur comportant (ou pas) un système d'exploitation. Cette image peut comporter une ou plusieurs partitions. L'image peut être déployée sur des postes informatiques ayant les mêmes caractéristiques que le poste de départ (où a été créée l'image). C'est donc une solution très pratique pour installer, réinstaller ou simplement maintenir en bon état des salles complètes de machines identiques.

Le présent tutoriel n'abordera pas le travail de création d'images qui est abondamment traité sur Internet (un prochain tutoriel sera rédigé sur ce sujet intégrant les nouvelles fonctionnalités liées à l'environnement Seven). L'objectif est de proposer une solution viable d'automatisation de descente d'image dans une salle à heures programmées. Cette automatisation descendra l'image sur les postes, reconfigurera le nom, le domaine et autres besoins. Un fichier log sera créé par chaque machine et remonté vers un serveur.

1-B - Prérequis

- La Solution Suite Ghost 2.5. a été choisie (et est conseillée) pour pouvoir répondre aux critères matériels de machines récentes.

- Le serveur Ghost est installé sous Windows Serveur 2008 Entreprise Service Pack 2. Il est intégré au domaine (si vous utilisez un domaine).

- Les mises à jour du serveur Ghost doivent être effectuées.

- À ce jour, seules les machines clientes sous Windows XP et Seven ont été testées. Toute la procédure portera donc sur ce type de machines.

- Nous partons du principe que les images des salles sont déjà faites et que le client Ghost est installé correctement dans ces images. L'image ne doit jamais avoir été intégrée au domaine.

- Si vous utilisez un domaine, il doit être configuré au sein du serveur Ghost et un compte service pour ce domaine doit être créé (cf. « Problèmes et configurations diverses »).

- Il est impératif que le Wake On Lan soit configuré et testé sur les machines.

1-C - Configuration d'une salle

1-D - Préparation des machines

Deux cas de figure sont possibles pour la préparation d'une salle :

- soit les machines sont déjà installées (et donc nommées correctement et intégrées au domaine) ;

- soit les machines sont vierges (avec un système fournisseur ou non).

1-D-1 - Machines déjà installées

Si les machines sont déjà installées et bien configurées, il n'y a qu'une étape à réaliser : il faut installer le client sur chaque machine en renseignant bien le nom du serveur Ghost (qui doit être bien enregistré dans le DNS auquel les machines ont accès). Cette opération peut être faite manuellement ou en créant une GPO de déploiement par exemple. Il existe aussi une solution de déploiement depuis la console Ghost.

1-D-2 - Machines vierges

Dans ce cas, la solution la plus simple consiste à préparer une session GhostCast depuis le serveur avec l'image correspondant aux machines de cette salle.

Il est rappelé que cette image doit contenir le client Ghost configuré correctement.

Il faut ensuite booter manuellement avec un client Ghost sur chaque machine (via un PXE ou support amovible) et procéder à une descente simple des images.

Ensuite, il faut passer renommer chaque machine puis les intégrer au domaine (cette opération pourrait se faire depuis le serveur, mais comme c'est la seule fois que l'on aura à le faire, il est conseillé de procéder ainsi). Sous les systèmes XP, il est conseillé d'utiliser l'utilitaire NewSID pour générer de nouveaux SID et renommer les machines en même temps.

À ce stade, les machines sont prêtes et n'ont plus besoin d'être modifiées.

1-E - Configuration de la salle sur le serveur

1-E-1 - Arborescence

Dans la console Ghost, les machines nouvellement installées apparaissent dans le dossier « Groupe de machines\Par défaut ». On peut y créer un dossier (ou toute une arborescence) afin de classer les différentes salles, pour ce faire couper puis coller les machines dans le dossier correspondant à votre salle comme dans l'exemple ci-dessous :

1-E-2 - Configuration des machines

Le driver des machines ainsi que leur logiciel client doivent être configurés dans la console (clic droit sur chaque machine, puis propriété et Client). Il est conseillé dans un premier temps d'utiliser le driver universel pour les cartes réseau et le client PC-DOS qui se trouve être le plus stable.

Il faut alors configurer chaque machine de la même façon. Si la tâche ne fonctionne pas correctement, il conviendra de modifier le driver ou le client (voir chapitre « Problèmes et configurations diverses »).

Il faut profiter de cette configuration pour vérifier que les machines sont bien nommées et le domaine bien renseigné :

2 - Préparation et configuration des tâches

2-A - Arborescence des tâches

Comme pour la gestion des machines, il est conseillé de classer les tâches suivant les salles et donc d'organiser les répertoires et sous-répertoires en fonction des besoins. En voici un exemple :

2-B - Les différentes tâches

Pour réaliser l'automatisation complète d'une salle, il faut configurer quatre ou cinq tâches en fonction des besoins. Cet exemple aborde une gestion complète intégrant un autologin ce qui nécessitera cinq tâches.

2-B-1 - Tâche 01-Clonage

La première tâche à configurer est celle du clonage des machines.

Dans le dossier créé pour la salle, faire un clic droit puis « Nouv. Tâche ».

Dans le nom de la tâche, renseigner « 01-clonage ». Ce nom peut être différent, mais pour une question de normalisation, il est préférable d'opter pour ce type de nommage.

Cocher « Cloner » et « Configurer ». Deux nouveaux onglets se rajoutent.

Dans « Machine/groupe de machines cibles », cliquer sur « Parcourir » puis sélectionner la salle dans le groupe de machines.

Cliquer sur l'onglet « Cloner ».

Dans la partie « Image », cliquer sur « parcourir ». Une nouvelle boîte de dialogue s'ouvre avec comme intitulé « Sélectionner l'image ». Cet espace sert de référencement des images. On peut classer les images en créant des dossiers et des sous-dossiers. Il est conseillé d'utiliser ces fonctionnalités surtout si de nombreuses images doivent être référencées.

Faire un clic droit sur le dossier « Images » et sélectionner « Nouveau dossier ».

Un dossier « Nouveau groupe d'images » est créé. Cliquer droit dessus pour le renommer.

Faire un nouveau clic droit dessus puis sélectionner « Nouvel élément ». Une nouvelle fenêtre s'ouvre.

Donner un nom à l'image. Ce nom est une référence, ce ne sera donc pas forcément le nom du fichier image proprement dit (image.gho). Dans le cadre de déploiement de salle, il est conseillé de donner le nom de la salle par exemple…

Laisser décoché « L'image se trouve sur la machine client ».

Cliquer ensuite sur « Parcourir… ». Un explorateur Windows s'ouvre.

Choisir un emplacement pour vos images (qui peut être un emplacement réseau).

Créer un dossier au nom de la salle par exemple.

Donner un nom de fichier en bas (le nom de la salle ou autre). Il est possible de sélectionner une image déjà existante (en cas de mise à jour de l'image par exemple).

Enfin cliquer sur « Ouvrir ».

Cliquer sur « OK » pour valider l'image. Enfin, sélectionner la référence de l'image nouvellement créée puis cliquer sur « OK ».

De retour dans la fenêtre « Propriété de Nouvelle tâche », cocher « Utiliser Ghostwalker pour effectuer un changement de SID sur la machine cible ».

Enfin cliquer sur « Enregistrer » puis « Fermer » (il n'y a pas besoin de toucher à la partie « Configuration »).

La configuration étant sur valeur par défaut, le serveur Ghost renommera les machines comme elles étaient avant la tâche et les réintégrera au domaine.

2-B-2 - Tâche 02-Login-DSI

Le but de cette tâche est de connecter le compte administrateur local des machines une fois. Cette opération sert à stabiliser les machines et à valider le paramétrage de certains drivers.

Cette tâche interviendra après le clonage des machines, qui seront donc déjà renommées et intégrées au domaine. La tâche exécute un script stocké sur un partage réseau qui doit être accessible par le serveur Ghost.

Créer une nouvelle tâche, cocher « Actions de logiciel et de fichier » et lui donner le nom de 02-Login-DSI.

Cliquer sur le nouvel onglet qui est apparu.

Cliquer ensuite sur « Ajouter » et cocher « Exécuter une commande ».

Dans la partie commande, donner le chemin complet vers le script :

Laisser coché « Exécuter la commande dans le système d'exploitation cible ».

Cliquer sur « Suivant » puis terminer sans toucher aux autres réglages.

Enfin, cliquer sur « Enregistrer » puis « Fermer ».

Le script se trouve en annexe du document.

2-B-3 - Tâche 03-Login-Salle

Cette autre tâche est similaire à la tâche précédente et servira cette fois à connecter le compte générique de domaine de la salle ou à supprimer l'autologin et les informations du compte administrateur.

Créer une nouvelle tâche comme précédemment en indiquant cette fois-ci le script correspondant (ici Login-CAA.vbs). Le script est disponible en annexe.

2-B-4 - Tâche 04-Log

Cette tâche permet de générer un fichier Log de l'ensemble de l'opération qui sera envoyé sur un partage réseau. Il faut donc prévoir un lieu où les machines pourront envoyer leur fichier log. La tâche est la même que les deux précédentes avec comme nom de script « Verfi_Auto_Ghost.vbs ». Le script est disponible en annexe.

2-B-5 - Tâche 05-Extinction

Cette tâche consiste à éteindre les machines.

Créer une tâche simple, cocher simplement « Actualiser la configuration » et renseigner la salle.

Dans la partie réseau, cocher « Utiliser l'éveil par le réseau pour exécuter une tâche » et « Éteindre les machines quand la tâche est terminée ».

2-C - Test du processus des tâches

Avant de paramétrer la planification complète du processus, il convient de tester les tâches manuellement. Il faut donc lancer la première tâche et vérifier visuellement si toute l'opération se déroule bien. Les machines doivent être renommées et intégrées au domaine par la suite. Il faut en profiter pour évaluer le temps nécessaire à la tâche. Il est possible que certains problèmes apparaissent, nombre d'entre eux sont traités au chapitre « Problèmes et configurations diverses ».

Il faut ensuite lancer les tâches suivantes dans l'ordre prédéfini. Si des erreurs sont constatées, il faut vérifier les différents paramètres utilisés, à savoir l'accès au partage où sont stockés les scripts, les logins et mots de passe utilisés pour le compte administrateur et le compte générique.

3 - Planification des tâches

Sur le serveur Ghost, ouvrir le planificateur de tâches (Windows 2008) avec le compte administrateur. Toujours dans la même optique de classer proprement les différents processus, créer une arborescence pratique dans le planificateur comme dans l'exemple ci-après :

Dans le répertoire correspondant à la salle, créer une nouvelle tâche (clic droit, « Créer une nouvelle tâche »).

Donner comme nom l'identifiant utilisé pour les tâches Ghost : 01-Clonage par exemple.

Cocher « Exécuter même si l'utilisateur n'est pas connecté » et « Exécuter avec les autorisations maximales ».

Dans l'onglet « Actions », cliquez « Nouveau »

Dans « Programme/script : » renseigner comme ceci (ou faire « parcourir » pour sélectionner directement le programme) : « C:\Program Files\Symantec\Ghost

gcons.exe ». Attention, les guillemets sont impératifs !

Dans « Ajouter des arguments » renseigner : /e « MLC\CAA\01-Clonage ». Le chemin d'accès doit suivre l'arborescence définie dans le serveur Ghost.

Cliquer sur « OK » pour enregistrer.

Enfin, configurer le déclencheur en fonction des besoins. L'idéal est de lancer ces processus dans la nuit et pas tous en même temps. En fonction du nombre de salles à traiter, il faut étudier les différentes possibilités.

Pour les tâches planifiées suivantes, il est possible d'exporter la première tâche créée et de l'importer pour s'en servir de modèle.

Changer le nom et l'argument de l'action (02-login-DSi, 03-login ; etc.).

La seconde tâche doit être exécutée avec un maximum de délai par rapport à la première. Lors du test des tâches, le temps de descente et reconfiguration des machines a été relevé.

Prévoir si possible 30 min à 1 heure de plus entre ces deux tâches.

Il ne faut pas oublier le TIME OUT du serveur, c'est-à-dire le temps maximum qu'attend le serveur pour que toutes les machines concernées par une tâche soient connectées (cf. « Problèmes et configurations diverses »).

Les tâches suivantes peuvent être effectuées avec un battement de 15 min (toujours prendre en compte le TIME OUT).

À ce stade, la salle est automatisée. L'image sera descendue automatiquement et à la fréquence choisie sur les machines qui seront entièrement reconfigurées.

4 - Problèmes et configurations diverses

4-A - Drivers carte réseau et clients

Lors de la descente de l'image sur les postes, la tâche peut ne pas fonctionner.

La machine peut par exemple rebooter normalement, lancer le client Ghost puis tourner en rond sur l'appel du serveur.

Elle peut aussi lors du reboot relancer Windows directement.

Enfin la tâche peut elle-même être stoppée dès le début en indiquant une erreur.

Cela provient en général soit d'un mauvais driver, soit du client utilisé.

La première chose à faire consiste donc à modifier le client en configurant les machines sur le serveur avec comme client WIN-PE.

Si le problème persiste, il faut entreprendre une recherche sur le site du constructeur de la machine ou de la carte réseau pour obtenir les drivers DOS adéquats. La documentation fournie par Symantec explique comment intégrer de nouveaux drivers.

Il peut arriver que malgré ces opérations, le driver ne fonctionne toujours pas.

Dans ce cas-là, la solution est de changer les cartes réseau de toutes les machines. Il faut bien sûr désactiver dans le bios les cartes d'origine pour éviter tout problème.

Cette manipulation peut générer un autre problème qui est le réveil des machines (WOL). En effet, de nombreux BIOS ne sont pas prévus pour permettre à une autre carte réseau de réveiller la machine. Il faut dans ce cas activer le réveil automatique par le bios 15 min avant le début de la tâche.

Dans le cas où le bios ne permet que la programmation d'un allumage que tous les jours par exemple, il faudra prévoir une extinction des machines programmées pendant la descente de l'image (par exemple, si la tâche est prévue une fois par semaine à 20 h 30 et que toutes les machines de la salle se réveillent à 20 h 15, il faut mettre en place un shutdown à 20 h 45. Ainsi, les machines ne restent allumées que 30 min au maximum le soir et ne s'éteindront pas le jour de la descente de l'image).

4-B - Time Out du serveur

Le serveur est configuré avec un TIMEOUT de 30 min. Cette configuration implique que si une tâche prend, par exemple, 1 h 00 et que l'on configure la tâche suivante 1 h 15 après celle-ci, une machine qui serait HS décalerait la fin de cette première tâche d'une demi-heure.

La seconde tâche sera tout de même lancée, mais les machines étant utilisées dans la première tâche, elles ne pourront pas répondre. La seconde tâche attendra elle-même 30 min décalera d'autant. Au bout du compte une machine HS peut faire planter tout le système.

Après de nombreux tests, il est conseillé de descendre le TIME OUT à 10 min (si les machines ne se sont pas connectées dans ce délai, c'est qu'elles ont un gros souci) et de prévoir une marge de plus de 30 min après la fin supposée de la première tâche.

Pour l'enchaînement des autres tâches, un battement de 15 min suffit.

Pour modifier le TIME OUT, cliquer Outils\Options et modifier « Délai du serveur ».

4-C - Configuration du domaine et compte de service

Pour configurer la prise en charge du domaine, cliquer sur « Outils\Liste de domaines pris en charge ».

Cliquer sur « Ajouter » puis renseigner le domaine.

Décocher « Créer un compte service de la Console dans le domaine », cette opération sera faite manuellement. Cliquer sur « OK » pour valider.

Créer un compte sur le domaine qui servira uniquement à la Console Ghost (pour plus de lisibilité). Ce compte doit être configuré en tant qu'opérateur de compte (il doit pouvoir intégrer les machines au domaine).

Une fois le compte créé, cliquer sur « Modifier » dans la partie Compte service de la Console, puis renseigner le login du compte (nom utilisateur) et son mot de passe.

Cliquer sur « OK » pour valider puis sur « fermer ».

4-D - Gestion des Logs

Les Logs sont envoyés sur un serveur (voir le script correspondant). Pour une optimisation du système, il est bon de prévoir un script (à développer) qui sera chargé de vérifier la bonne remontée des logs et les erreurs éventuelles. Il pourra ensuite prévenir par mail le responsable du système Ghost ou de la salle visée.

5 - Annexe

5-A - Scripts Ghost

5-A-1 - Login-DSI.vbs

Login-DSI.vbs

'##=================================================================================================##
'##== Login-DSI.vbs - Viduc - Développez.com =======================================================##
'##== Ce script a pour objectif de loguer une session administrateur automatiquement sur une =======##
'##== machine windows après un reboot. Il faut renseigner les variables Login et Password avec les =##
'##== éléments de votre compte administrateur ======================================================##
'##=================================================================================================##

'##===============================================##
'## Déclaration des variables et objets global  ==##
'##===============================================##
Option Explicit
On Error Resume Next
Dim WshShell, FSO, WshNetwork
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")

Dim strComputer
strComputer = WshNetwork.ComputerName

dimobjWMIService, colOperatingSystems, objOperatingSystem
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" &strComputer& "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")

Dim Fichier, Log
ConstForReading = 1, ForWriting = 2, ForApending = 8
Log = "DSI-Ghost-Log_" &strComputer& ".log"

Dim Login,Password
Login = "monloginadmin"
Password = "monpasswordadmin"
'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FONCTIONS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#==================================================================================#
'#========== Fonction: FichierLog ==================================================#
'#========== But: Gestion du fichier de LOG ========================================#
'#========== Arguments: Message ====================================================#
'#========== Retour: Aucun =========================================================#
'#==================================================================================#
Function FichierLog(Message)
If not FSO.FileExists("C:\" & Log) Then
Set Fichier = FSO.OpenTextFile("C:\" & Log, ForWriting,true)
Else
Set Fichier = FSO.OpenTextFile("C:\" & Log, ForApending,true)
End If
Fichier.writeline(Date & "|" & Time & "|" & Message)
Fichier.Close
End Function
'#==================================================================================#
'#================================== Fin FichierLog ================================#
'#==================================================================================#

'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FIN FONCTIONS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! INSTALLATION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#==========================================#
'#== Inscription dans la base de registre ==#
'#==========================================#
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName","DSI","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : DefaultUserName ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : DefaultUserName ->echec. Numero de l'erreur : " &Err.number)
End If

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword","PASSWORD","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : DefaultPassword ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : DefaultPassword ->echec. Numero de l'erreur : " &Err.number)
End If

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AltDefaultUserName","DSI","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : AltDefaultUserName ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : AltDefaultUserName ->echec. Numero de l'erreur : " &Err.number)
End If

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AltDefaultPassword","PASSWORD","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : AltDefaultPassword ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : AltDefaultPassword ->echec. Numero de l'erreur : " &Err.number)
End If

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon",1,"REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : AutoAdminLogon ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : AutoAdminLogon ->echec. Numero de l'erreur : " &Err.number)
End If

'#==========================#
'#== Reboot de la machine ==#
'#==========================#

For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next

5-A-2 - Login-User.vbs

Il s'agit du même script que précédemment, il faut juste modifier l'utilisateur et le mot de passe dans les clés de registre.

Pour loguer un compte de domaine (un compte générique pour une salle par exemple, il faut rajouter les deux clés suivantes :

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomain","mondomaine","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : DefaultDomain ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : DefaultDomain ->echec. Numero de l'erreur : " &Err.number)
End If

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AltDefaultDomain","mondomaine","REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : AltDefaultDomain ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : AltDefaultDomain ->echec. Numero de l'erreur : " &Err.number)
End If

Pour simplement retirer l'autologin du compte administrateur, il faut mettre la valeur 0 et changer le login et password des variables (vous pouvez mettre n'importe quoi, le compte n'étant pas logué par la suite, il s'agit juste d'effacer les traces du compte administrateur).

WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon",0,"REG_SZ"
If (Err.number = 0) Then
FichierLog("Action|Enregistrement Base de Registre : AutoAdminLogon ->reussie")
Else
FichierLog("Erreur|Enregistrement Base de Registre : AutoAdminLogon ->echec. Numero de l'erreur : " &Err.number)
End If

5-A-3 - Verif_Auto_Ghost.vbs

Verif_Auto_Ghost.vbs

'##=================================================================================================##
'##== Verif_Auto_Ghost.vbs - Viduc - Développez.com ================================================##
'##== Ce script a pour objectif d'envoyer sur un serveur le fichier log créé pendant le processus ==##
'##== de descente d'image Ghost. Il faut renseigner la variable Serveur_Log avec le nom du partage =##
'##== accessible à vos machines. ===================================================================##
'##=================================================================================================##

'##==============================================##
'## Déclaration des variables et objets global ==##
'##==============================================##
Option Explicit
On Error Resume Next
Dim WshShell,FSO, WshNetwork, RootLDAP, WMIService
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set RootLDAP = GetObject("LDAP://RootDSE")

Dim strComputer
strComputer = WshNetwork.ComputerName

Set WMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" &strComputer& "\root\cimv2")

Dim Fichier, FicLog, Serveur_LOG
ConstForReading = 1, ForWriting = 2, ForApending = 8
FicLog = "Ghost_" &strComputer& ".log"
Serveur_LOG = "\\monserveur\mondossierpartage\"

'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FONCTIONS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#=================================================================================#
'#========== Fonction: FichierLog =================================================#
'#========== But: Gestion du fichier de LOG =======================================#
'#========== Arguments: Message ===================================================#
'#========== Retour: Aucun ========================================================#
'#=================================================================================#
Function FichierLog(Message)
If not FSO.FileExists("C:\" &FicLog) Then
Set Fichier = FSO.OpenTextFile("C:\" &FicLog, ForWriting,true)
Else
Set Fichier = FSO.OpenTextFile("C:\" &FicLog, ForApending,true)
End If
Fichier.writeline(Date & "|" & Time & "|" & Message)
Fichier.Close
End Function
'#=================================================================================#
'#================================== Fin FichierLog ===============================#
'#=================================================================================#

'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! FIN FONCTIONS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#=================================================================================================#
'#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! VERIFICATION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
'#=================================================================================================#

'#=================================================#
'#== Création du fichier Log et validation Ghost ==#
'#=================================================#
FichierLog("Info|Clone de la machine  " &strComputer& " reussie")

'#=========================================#
'#== Vérification Intégration au domaine ==#
'#=========================================#
Dim DomainName
DomainName = RootLDAP.Get("DefaultNamingContext")
If(Err.number=0) Then
FichierLog("Info|La machine  " &strComputer& " appartient au domaine " &DomainName)
Else
FichierLog("Erreur|La machine  " &strComputer& " ne s'est pas intégrée au domaine ")
End If

'#==================================#
'#== Vérification de l'autoLogin ==#
'#==================================#
Dim colComputer, objComputer
Set colComputer = WMIService.ExecQuery("Select * from Win32_ComputerSystem")
For EachobjComputer in colComputer
FichierLog("Info|L'utilisateur  " &objComputer.UserName& " est connecté sur la machine ")
Next

'#=============================================#
'#== Envoi du fichier LOG sur le serveur LOG ==#
'#=============================================#
FSO.CopyFile "C:\" &FicLog, Serveur_LOG&FicLog,true
WScript.Sleep(3000)
If ((Err.number = 500) OR (Err.number = 0)) Then
FichierLog("Action|Copie du fichier " &FicLog& " dans " &Serveur_LOG& "\Temp\DSI-Ghost\" &FicLog& " reussie")
Else
FichierLog("Erreur|Impossible de copier le fichier " &FicLog& " dans " &Serveur_LOG& "\Temp\DSI-Ghost\" &FicLog& ", code erreur: " &Err.number)
End If

6 - Conclusion

Ce tutoriel vous permet désormais de maintenir une salle informatique propre. Cette solution peut cependant poser quelques soucis avec certaines machines (par exemple des écrans bleus lors de reboot), mais fonctionne très bien dans la plupart des cas.

L'apparition de Seven permet désormais de nouvelles approches comme la gestion d'image unique pour différents modèles de machines (une image vierge de drivers qui se configure après le clonage en allant chercher dans une base les drivers correspondant à la machine). Un prochain tutoriel abordera la création d'images et la prise en compte de ces évolutions.

La solution de Log n'est pas satisfaisante, j'ai donc entrepris l'élaboration d'une autre solution plus pertinente avec un système d'alerte par mail prévenant de l'échec potentiel d'une machine lors des tâches automatiques. Cette solution sera proposée plus tard en complément de ce tutoriel.

Je tiens à remercier ma conjointe pour le temps passé à relire et corriger les fautes et pour m'avoir permis d'écrire un article « moins » technique. Je veux aussi remercier Sara Galloy qui m'a poussé à me lancer pour ce premier article et les bénévoles qui ont bien voulu prendre de leur temps pour me relire et me conseiller.