Dans l’étape précédente, nous avions créé le fichier de réponse qui va permettre à Sysprep de savoir ce qu’il va avoir à faire.

Il y a bien sûr des choses qui n’étaient pas fondamentales, mais je vous laisse adapter à votre besoin.

Notez que ce fichier peut suffire si vous clonez le poste avec une solution simple (ghost ou clonezilla par exemple), mais on va le compléter plus tard car de mon coté je clone avec WDS.

J’ai tout de même pris soin de faire un snapshot avant de continuer…

Préparation des fichiers

J’avais choisi de créer et installer un logo OEM (oemlogo.bmp) et un fond d’écran (background.jpg). Il faut que je crée et copie ces deux fichiers dans C:\Windows\System32\.

De la même manière, il faut que je déplace le fichier unattend.xml dans le dossier C:\Windows\System32\Sysprep.

Sysprep

Bien, il est temps de lancer sysprep en lui indiquant différents paramètres, mais avant de lancer quelques commandes pour modifier la base de registre. Le plus simple est de créer un fichier sysprep.bat qui est à exécuter en mode administrateur et qui contient :

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v SkipRearm /t REG_DWORD /d 00000001 /f 
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v SkipRearm /t REG_DWORD /d 00000001 /f
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus /v CleanupState /t REG_DWORD /d 00000002 /f
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus /v GeneralizationState /t REG_DWORD /d 00000007 /f

cd C:\Windows\System32\sysprep\
"C:\Windows\System32\sysprep\sysprep.exe" /oobe /shutdown /generalize /unattend:C:\Windows\System32\sysprep\unattend.xml

Si j’analyse rapidement :

  • les 4 premières lignes modifient la base de registre pour remettre les compteurs à zéro concernant le réarmement de Windows©. En effet, il y a une sécurité qui fait en sorte que vous ne pouvez pas enchainer les sysprep… ça serait trop simple de copier Windows© avec un seul numéro de série sinon ;
  • ensuite, je me place dans le répertoire de sysprep ;
  • puis je lance sysprep avec les paramètres suivants :
    • /oobe : le prochaine redémarrage se fera en mode OOBE pour sortir du mode Audit ;
    • /shutdown : éteindra l’ordinateur à la fin du sysprep ;
    • /generalize : généralise l’installation de Windows© ;
    • /unattend:C:\Windows\System32\sysprep\unattend.xml : spécifie le fichier de réponse à utiliser.

Normalement, sysprep se lance, exécute sa phase de généralisation puis éteint l’ordinateur.

À ce stade là, si vous redémarrez la machine, elle va exécuter les passes de préparation pour arriver à la page d’accueil. Je ne souhaite pas le faire car je veux d’abord récupérer une image du poste dans cet état afin de la placer sur les autres ordinateurs.

Pour la création de l’image, il est possible d’utiliser des outils libres et gratuits comme Clonezilla, ou bien le système Windows© Deployment Services (WDS).

Création de l’image

Bien, en ce qui me concerne, j’utilise WDS… oui, OK, c’est pas open source… mais je suis pas tout seul et je fais avec les outils communs.

D’habitude, je branche un disque USB à mon PC, puis crée une image sur le disque USB qui est ensuite envoyée sur le serveur. Ça se fait donc en 2 étapes. Concernant la partie démarrage de l’ordinateur, je démarre en PXE pour récupérer le système WinPE qui va bien sur le serveur et me permet de créer l’image.

Je vais donc essayer de créer exactement le même comportement sur ma VM, surtout que j’ai pas vraiment de place disponible sur mon poste, mais on verra par la suite qu’il y a plus simple…

Préparation de la VM

D’abord je supprime le DVD, j’en ai plus besoin.

Ensuite je mets la carte réseau en première ligne pour le démarrage.

Capture avec disque USB

Cette étape n’est pas forcément nécessaire, mais ça m’a permis de découvrir comment monter un disque USB sur une VM.

Donc, je cherche à activer le disque USB… Pour ce faire, il y a quelques étapes à franchir.

Je branche mon disque USB sur l’ordinateur qui héberge Hyper-V, puis je lance l’outil de gestion des disque avec la commande diskmgmt.msc.

En faisant un clic droit sur le disque correspondant au disque USB, je le passe en hors connexion.

Au passage, lorsque j’en aurais à nouveau besoin sur mon ordinateur, il faudra que je le repasse « en ligne » par cette même action.

Pour finir, j’ajoute un disque dur à ma VM que je fais pointer en direction de mon disque USB.

Il devrait être maintenant reconnu immédiatement. Je peux d’ailleurs observer qu’il est disponible dans les options de démarrage.

Capture de l’image avec WDS

Démarrage en mode PXE de la VM, puis demande d’approbation sur le serveur. J’imagine que c’est dû au fait que je n’avais pas connecté ma VM au domaine durant la phase de préparation.

Je lance l’outil de capture.

Je sélectionne le volume à cloner, et donne un nom et une description à l’image. Ne sont proposés dans la sélection de volumes que ceux qui ont été préparés avec sysprep.

Je spécifie l’emplacement pour le stockage de l’image, à savoir d’abord sur le disque dur USB, puis un envoi de l’image sur le serveur.

À ce stade là, j’ai découvert que je pouvais enregistrer l’image dans le disque C: de la VM. Attention, c’est sous condition d’avoir assez d’espace disponible.

Notez qui si vous voulez envoyer l’image sur un serveur, il faudra donner les identifiants d’un utilisateur du domaine ayant le droit de faire cette opération sous la forme : domain\user.

Et c’est parti…

Comme je suis sur un disque USB connecté à l’hôte, l’opération est plutôt longue, c’est pas l’idéal… Mais je m’en fous, je vais dormir !

Après quelques (…) instants, l’image est créée et uploadée sur le serveur. Je peux donc éteindre la VM.

Je retire le disque USB de la VM.

Je modifie l’ordre de démarrage pour placer le disque en premier.

Puis je réactive le disque USB sur mon poste hôte pour y avoir à nouveau accès.

Enfin, je vérifie que l’image soit bien présente sur le disque USB et sur le serveur.

Test de déploiement d’une image

Il n’y a plus qu’à tester l’image sur un poste ou une machine virtuelle.

Le déroulement est simple :

  • démarrage de la machine en PXE ;
  • approbation du poste sur le serveur si nécessaire ;
  • choix de l’image WinPE de démarrage ;
  • choix de l’image à installer (celle qu’on vient de créer) ;
  • et on laisse faire…

Pour tester, je suis aussi passé par une machine virtuelle avec un accès réseau et un démarrage en PXE.

Oui, mais ça fait pas tout à fait ce que je veux… c’est normal :

  • le fichier de réponse que l’on a créé est fonctionnel pour la préparation de l’image et le déploiement en local (sans serveur WDS) ;
  • le serveur WDS possède lui aussi un fichier de réponse, voir des fichiers de réponses qui peuvent rentrer en contradiction avec vos instructions locales.

Fichier réponse WDS

Il est possible d’automatiser la réponse du serveur WDS, c’est pratique car il n’y a plus à sélectionner l’image à chaque fois.

Pour ce faire, l’une des étapes est de créer un fichier de réponse sur le serveur WDS, puis de le lier à la machine.

Je copie / colle donc mon fichier unattend.xml, puis le renomme en unattend_win10_LTSC_2019_BTS.xml pour facilement pouvoir l’identifier sur le serveur, et j’apporte les ajouts suivants à la phase 1 windows PE pour spécifier quelle image doit être installée sur quelle partition :

Miscrosoft-Windows-Setup… > WindowsDeployementService > Image Selection

  • WillShowUI : OnError

Miscrosoft-Windows-Setup… > WindowsDeployementService > Image Selection > InstallImage

  • Filename : win10_LTSC_2019_BTS.wim (le nom du fichier correspondant à l’image situé dans \RemoteInstall\Images\ sur serveur WDS) ;
  • ImageGroup : Win10 x64 BTS (le groupe dans lequel est stocké l’image) ;
  • ImageName : win10_LTSC_2019_BTS (le nom de l’image tel qu’indiqué dans WDS).

Miscrosoft-Windows-Setup… > WindowsDeployementService > Image Selection > InstallTo

  • DiskID : 0 (le disque local sur lequel installer l’image) ;
  • PartitionID : 3 (la partition de ce disque sur laquelle installer l’image).

Ce fichier est ensuite à enregistrer dans le répertoire \RemoteInstall\WdsClientUnattend du serveur WDS.

Puis il reste à spécifier pour chacun des postes quel fichier unattend doit être utilisé (il faut que le poste soit déjà identifié sur le serveur, bien sûr).

Sur la console de gestion de WDS, sélectionnez votre client dans « Périphérique de préinstallation Active Directory ».

Clic droit > Propriétés > Installation sans assistance client > Fichier d’installation sans assistance > sélectionnez le fichier unattend nouvellement créé.

De cette manière, dès que ce poste démarrera en PXE, il viendra chercher l’image correspondante et ses paramètres associés sur le serveur WDS.

On peut évidemment faire cette opération en ligne de commande sur le serveur WDS, donc enchainer les postes avec un fichier .bat qui contient :

wdsutil.exe /set-device /device:NOM_DU_POSTE /ReferralServer:WDS_SERVER.DOMAIN.COM /PxePromptPolicy:NoPrompt /WdsClientUnattend:WdsClientUnattend\unattend_win10_LSTC_2019_BTS.xml /User:user@domain.com /JoinRights:Full /JoinDomain:Yes /BootImagePath:"Boot\x64\Images\Win 10 v1909.wim"

Conclusion

Finalement, pour un petit PC pas franchement béton, il m’a bien rendu service pour héberger Hyper-V…

Pour finir, j’imagine qu’il existe plein de imprécisions dans ce que je viens d’écrire, pleins d’autres possibilités et subtilités… mais je suis autodidacte et ce n’est qu’une facette de mon travail, je le rappelle !

J’en vois déjà quelques unes que je ne maitrise pas encore mais sur lesquelles j’ai le sentiment qu’il va falloir que je me penche :

  • associer MDT à WDS pour la création de l’image (images trick, thin, hybride) ;
  • créer une image plus générique puis déployer des applications (par poste ou utilisateurs) par scriptes ou GPO ;
  • créer un pool d’applications façon Chocolatey ;
  • d’autres réglages surement pertinents à apporter au fichier réponse ;
  • gérer correctement le déploiement des drivers à partir de WDS ou WSUS par exemple ;
  • et tout ce que je ne connais pas encore…

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

J’accepte les conditions et la politique de confidentialité