Table de Matieres
I . Présentation
En complément de mes tutoriels sur MDT, je vous propose quelques petits exemples de personnalisation d’une séquence de tache, histoire d’apporter encore un peu de matière à un sujet déjà très fourni.
II . Exemple 1 – Configurer des rôles et/ou des fonctionnalités
A. Avant-propos
Pour apporter des personnalisations sur un système, telles que l’ajout/suppression de fonctionnalités sur un système, vous disposez de plusieurs solutions :
- Effectuer ces personnalisations sur une machine de référence puis capturer une image WIM. Cette technique est peu recommandée pour des raisons évidentes de lourdeur et d’usage d’un processus de fabrication manuel mal encadré.
- Effectuer des modifications dans le fichier « unattend.xml » via l’outil WISM. Bien que meilleure que la précédente, cette technique reste complexe à mettre en œuvre pour des néophytes en raison des contraintes de l’outil et de l’interface.
- Réaliser un script chargé d’exécuter la configuration via des commandes du genre « DISM /online /Enable-Feature … » ou « DISM /online /Disable-Feature » et l’ajouter en tant qu’application MDT
- Ajouter une action personnalisée dans la séquence de tache concernée. C’est cette dernière technique que je vous propose d’explorer:
Il est logique de considérer que l’opération prédéfinie « Install Roles and Features » proposée depuis le MDT2012 est une tache plutôt réservée à la configuration des rôles et/ou des fonctionnalités sur un système Windows de type « serveur ».
En fait, Microsoft a initialement regroupé ces opérations dans ce but, c’est à dire installer des rôles tels qu’un contrôleur de domaine (ADDS), un serveur de nom (DNS) ou bien encore un serveur DHCP, et autres fonctionnalités. Toutefois, si vous regardez de plus près, vous constaterez que cette tache propose une classification incluant les systèmes clients.
B. Mise en œuvre
Pour implémenter cette solution, ouvrez les propriétés de la séquence de tache désirée à partir de la console « Deployment Workbench« , puis sélectionnez l’onglet « Task Sequence« .
Pour l’exemple, on prendra une séquence de déploiement d’un système Windows 7.
Développez l’arborescence des taches afin de sélectionner le groupe « Custom Tasks » situé sous le groupe « State Restore »
Cliquez ensuite sur le bouton « Add … Roles« , puis ajoutez le choix « Install Roles and Features« . Recommencez pour ajouter ou « Uninstall Roles and Features« .
Vous obtenez donc 2 nouvelles taches, sous lesquelles vous pouvez sélectionner le système d’exploitation concerné, en l’occurrence « Windows 7 » et cocher les différentes fonctionnalités.
Il ne vous reste plus sélectionner la tache correspondante à l’activation (Install …) ou la désactivation (Uninstall …) puis cocher les fonctionnalités de votre choix.
Si vous exécutez cette séquence de tache, les pages seront affichées dans l’assistant.
A noter (Est-ce un bug ?) : Lorsque les pages sont affichées dans l’assistant, bien qu’effectives, les sélections effectuées ne seront pas affichées (toutes les cases apparaissent décochées).
Pour masquer ces écrans, ajoutez la directive « SkipRoles = YES » dans le fichier « CustomSettings.ini » ou la base de données.
III. Exemple 2 – Tester vos applications
Pour tester vos applications ou bundles MDT, avant de les intégrer dans les séquences globales de déploiements, vous pouvez utiliser une petite technique simple, en procédant comme suit.
Après avoir déclaré vos applications dans le MDT, au niveau de la console « Deployment Workbench« , créez simplement une nouvelle séquence de tache via le menu « New Task Sequence » puis entrez un identifiant et un nom de votre choix.
Cliquez sur « Next« ,
Sélectionnez « Custom Task Sequence » dans la liste déroulante, puis cliquez 2 fois sur « Next » puis sur « Finish« .
Afin d’illustrer cet exemple, sélectionnez cette nouvelle séquence de tache puis utilisez le menu « Propriétés » et sélectionnez l’onglet « Task Sequence« .
Vous pouvez constater qu’une action « Install Application » est déjà présente et que par défaut, cette opération propose « Install multiple applications« . Autrement dit, toutes les applications déclarées dans le MDT seront proposées.
Cliquez sur le bouton « Annuler« .
Sur votre machine de test, si votre compte de session dispose des droits suffisants, tapez la commande suivante :
\\WDS-MDT\DeploymentShare$\Scripts\LiteTouch.vbs /SkipTaskSequence:YES /TaskSequenceID:T001
Vous devez bien sûr adapter cet exemple avec vos propres informations, et au besoin créer un petit script suivant pour éviter de saisir ces commandes à chaque essai.
Notepad TestAMDT.cmd
Net use Z: \\WDS-MDT\DeploymentShare$ /user:LABO\DeplAccount Pa$$w0rd Z:\Scripts\LiteTouch.vbs /SkipTaskSequence:YES /TaskSequenceID:T001
Ce script facultatif est destiné à relancer le processus de test car la connexion au lecteur réseau est supprimée après chaque exécution de la tâche.
La suite dépend de vos préférences déclarées dans les fichiers de configuration. Reportez-vous à mes tutoriels sur MDT pour plus d’information sur le sujet. En gros, si vous avez positionné la directive « SkipBDDWelcome=YES« , avec les identifiants de connexion dans le « bootstrap.ini » et ajouté les directives « SkipComputerName=YES » et « SkipDomainMembership=YES » dans la section « (Default) » de « customsettings.ini« , vous arriverez directement sur la page suivante :
Vous n’avez plus qu’à cocher les applications dont vous souhaitez tester l’installation.
IV. Exemple 3 – Taches conditionnelles
Afin d’explorer un peu plus le séquenceur MDT, je vous propose un autre exemple, destiné à présenter les notions de conditions et par la même occasion démontrer l’intérêt des « groupes » que l’on peut définir au sein des séquences de taches.
A. Principes d’un groupe de taches :
Chaque tache peut disposer de ces propres conditions mais cela peut rapidement nuire à la lisibilité de l’ensemble. La démonstration que j’expose ici est plutôt une bonne pratique sans toutefois être une obligation systématique.
L’intérêt premier d’un groupe est bien évidement de regrouper plusieurs de taches élémentaires dans une thématique donnée mais également d’ajouter éventuellement des conditions d’exécution sur cet ensemble de taches.
Lorsque vous sélectionnez un groupe, au même titre que pour une tache, le MDT vous propose un onglet « Option » permettant de :Désactiver cette étape (« Disable this step« ) – C’est-à-dire, n’exécuter aucune des taches qu’il contient
- Continuer en cas d’erreur (« Continue on error« ) – C’est-à-dire, poursuivre l’exécution des tâches suivantes même si une erreur survient.
- Ajouter des conditions comme suit :
- « If statement » – Permet de déterminer un ou plusieurs niveaux d’imbrication des conditions afin de créer des tests complexes.
-
- « Task Sequence Variable » – Permet de tester la valeur d’une variable d’environnement MDT
-
- « Operating System Version » – Permet de tester la version et l’architecture du système d’exploitation
-
- « Query WMI » – Permet de définir une requête WMI en langage WQL (à l’instar d’un filtre WMI de GPO) – La condition est considérée comme « vraie » (« true ») dès lors que le résultat renvoyé n’est pas vide. (Le signe « % » désigne le caractère générique de la clause « Where » en langage WQL)
-
- « Registry Setting » – Permet de tester la présence, l’absence ou la valeur d’une clé de registre.
-
- « Installed Software » – Permet de tester si un package d’application fait partie des produits déjà installé.
Vous pouvez utiliser le bouton « Browse » pour sélectionner le package .MSI de l’application et ainsi obtenir ces caractéristiques.
-
- « Folder Properties » – Permet de tester la présence d’un dossier et éventuellement contrôler sa date de création.
-
- « File Properties » – Permet de tester la présence d’un fichier et éventuellement contrôler sa version et/ou sa date de création.
B. Mise en œuvre des taches conditionnelles
Imaginons maintenant que l’on souhaite déployer Windows 7, à partir d’une seule séquence de taches sur un ensemble machines physiques et virtuelles, il peut être intéressant de les distinguer. Pour ce cas typique, MDT propose plusieurs variables prédéfinies susceptibles de répondre à vos attentes :
Variable | Type de valeur | Description |
%isLaptop% | Booléen | Détermine si l’ordinateur est de type portable |
%isDesktop% | Booléen | Détermine s’il s’agit d’un ordinateur de bureau |
%isVM% | Booléen | Détermine s’il s’agit d’une machine virtuelle |
%VMPlatform% | Chaine | Contient l’identifiant de la plateforme de virtualisation |
Maintenant, si notre souhait est d’installer les compléments de machine virtuelle selon la plateforme de virtualisation, l’usage de la dernière variable suffira.
1. Ajouter les applications (outils) propres à chaque environnement virtuel
Dans la vraie vie 🙂 , il faudrait commencer par récupérer les différents compléments et les ajouter en tant qu’application. Dans les grandes lignes, il vous faut récupérer les fichiers .iso des machines invitées (guest), généralement situés dans les dossiers de l’hôte de virtualisation et trouver la commande d’installation silencieuse
Plateforme | ISO Guest | Exemple d’installation silencieuse |
Hyper-V | Vmguest.iso | « %~dp0x86\setup » /quiet /norestart »%~dp0amd64\setup » /quiet /norestart |
VirtualBox | VBoxGuestAdditions.iso | « %~dp0VBoxWindowsAdditions » /S |
VMware | Windows.iso | « %~dp0\setup » /s /v/qb |
Xen | ? | Votre serviteur n’a malheureusement trop peu d’expérience sur ce produit 🙁 mais le principe reste le même. |
Ces opérations étant relativement longues et complexes à décrire, nous utiliserons des applications factices pour cette démonstration.
Nous allons donc utiliser de simple scripts vbs destinés signaler et suspendre la séquence. Pour faire au plus simple, je vous propose de créer, les 4 scripts suivants puis de les enregistrer dans un dossier temporaire spécifique, tel que « C:\Temp\Outils Platform », ainsi q’un nom distinctif tel que « DisplayPlatform.vbs ».
DisplayVMware.vbs
wscript.echo "Installation des outils de machine virtuelle" & vbCrLf & "Plateforme : VMware"
DisplayHyperV.vbs
wscript.echo "Installation des outils de machine virtuelle" & vbCrLf & "Plateforme : Hyper-V"
DisplayVBox.vbs
wscript.echo "Installation des outils de machine virtuelle" & vbCrLf & "Plateforme : VirtualBox"
DisplayXen.vbs
wscript.echo "Installation des outils de machine virtuelle" & vbCrLf & "Plateforme : Xen Server"
A partir de la console « Deployment Workbench« , sélectionnez la rubrique « Applications » puis cliquez sur « New Folder » et renseignez un nom de dossier tel que » Virtual Tools » et cliquez sur « OK« .
Note : Bien que dans cet exemple, nous n’ayons besoin que d’une simple application pour chaque environnement, il est conseillé de créer des bundle ou « coquille vide » afin d’y associer le ou les applications dans un second temps. Cette technique est plus lourde à mettre en place mais à l’instar des groupes, permet une meilleure organisation et gestion sur le long terme.
Sélectionnez ce nouveau dossier puis cliquez sur « New Application« , puis conservez l’option « Application with source files » et cliquez sur « Next« .
Entrez un nom tel que « VMware Tools » dans le champ « Application Name » puis cliquez sur « Next« . Cliquez sur le bouton « Browse » afin de sélectionner l’un des scripts précédemment créés.
Le chemin du dossier de l’application fictive doit ensuite s’afficher au niveau champ « Source Directory« . Cochez éventuellement la case « Move the files to the deployment share instead of copying them » puis cliquez 2 fois sur « Next« .
Dans le champ « Command line » entrez la commande d’installation correspondante, comme par exemple « wscript DisplayVMware.vbs »
Cliquez ensuite 2 fois sur « Next » et enfin sur « Finish« .
Recommencez ces opérations pour chacune des plateformes virtuelles supportées.
2. Ajouter des groupes à la séquence de tache
Accédez aux propriétés de votre séquence de tache de déploiement de Windows 7, puis créez un nouveau groupe « Virtual Tools » sous le groupe « State Restore« . Utilisez les boutons flèches « Up » / « Down » pour positionner le bon ordre, comme par exemple, juste après « Custom Task« .
Créez ensuite un nouveau « sous-groupe » pour chacune des plateformes désirées, comme par exemple « Hyper-V », « VMware », « XenServer », »VirtualBox ».
Facultatif : Si vous ne souhaitez pas modifier votre séquence d’installation existante, vous pouvez créer une nouvelle séquence de taches, (cf Exemple 2) en choisissant « Custom Task Sequence », afin de tester individuellement ces applications sur chaque plateforme, déjà installée. Si les tests sont concluants, vous pourrez copier/coller cet ensemble dans la séquence d’installation existante.
3. Ajouter des conditions sur les groupes
Sélectionnez ensuite chacun des groupes de plateforme, et l’onglet « Option » correspondant afin d’ajouter la condition comme suit :
Cliquez sur « Add … Task Sequence Variable » puis indiquez la variable « VMPlatform« , sélectionnez l’opérateur de condition « equals » et enfin la valeur correspondante au sous-groupe concerné, soit « Hyper-V« , « VMware« , « Xen » ou « VirtualBox« .
Cliquez sur « OK » pour valider l’entrée. En cas d’erreur de saisie, vous pouvez revenir sur le réglage en utilisant le bouton « Edit« .
Recommencez l’opération pour chacun des groupes de plateforme.
4. Ajouter les taches spécifiques à chaque groupe
Sélectionnez un groupe de plateforme, puis cliquez sur le bouton général « Add … General … Install Application »
Sous l’onglet « Properties » de cette nouvelle tâche « Install Application« , sélectionnez l’option « Install a single application » puis cliquez sur le bouton « Browse » afin de sélectionner l’application désirée.
Cliquez sur « OK » pour valider ce choix.
Réitérez cette opération pour chacun des groupes de plateforme, puis cliquez sur « Appliquer » / « OK » pour valider la séquence de tache.
Si vous avez créé une séquence dédiée (cf remarque facultative), rendez-vous sur l’une de vos machines virtuelles, puis exécutez le script « LiteTouch.vbs » de votre MDT, et choisissez cette séquence de test.
Cliquez sur les boutons « Next » puis « Begin« . Vous devriez voir l’affichage suivant, correspondant au script de l’application correspondante à la plateforme concernée.
Cliquez sur le bouton « OK » de la boite de dialogue du script. La séquence devrait s’achever sans erreur et ignorer ainsi les actions relatives aux autres plateformes virtuelles. De la même manière, si vous exécutez cette séquence sur un poste physique, aucune des taches conditionnelles aux plateformes virtuelles ne sera traitée. 🙂
V. Exemple 4 – Gestion des clés produits
A. Rappel sur les groupes d’une séquence par défaut
Pour bien comprendre ce mécanisme des dossiers “conditionnel”, je vous invite à explorer une séquence de tache typique “Standard Client Task Sequence” et les conditions appliquées à chacun d’entre eux. L’analyse du premier niveau suffit amplement :
En sélectionnant successivement chacun des groupes de premier niveau et en observant l’onglet “Option” dans le volet de détail, vous pourrez relever les informations suivantes :
Groupe de taches | Conditions |
Initialization | Aucune |
Validation | If any conditions are true :Task sequence variable PHASE equals VALIDATION |
State Capture | Task sequence variable PHASE equals STATECAPTURE |
Preinstall | Task sequence variable PHASE equals PREINSTALL |
Install | Task sequence variable PHASE equals INSTALL |
PostInstall | Task sequence variable PHASE equals POSTINSTALL |
State Restore | Task sequence variable PHASE equals STATERESTORE |
Vous l’aurez compris, à l’exception du premier groupe de taches qui est donc exécuté dans tous les cas, les autres taches s’exécutent en fonction de la phase d’avancement du déploiement.
B. Ajout des différentes clés par défaut
Vous avez probablement constaté qu’en l’absence de clé produit, l’installation d’un système Windows demande une intervention humaine, pour saisir la clé ou simplement l’ignorer et poursuivre le processus.
Là encore, on pourrait considérer plusieurs palliatifs possibles :
- Injecter la clé dans l’image WIM via une commande “DISM /Set-ProductKey”
- Injecter la clé via un script ou une application du genre “cscript /b c:\windows\system32\slmgr.vbs /ipk AAAAA-BBBBB-CCCCC-DDDDD-EEEEE-FFFFF”
- Modifier le fichier “unattend.xml” via WSIM dans le composant (
- Si l’on dispose d’une base de données, il est possible de renseigner la propriété “ProductKey” dans la (pour chaque ordinateur) ou plus simplement au niveau d’un “role” dédié au déploiement d’un système.
- L’ajout de la directive ”ProductKey = ” au sein du fichier “CustomSettings.ini” n’est pas adaptée à des déploiements de systèmes différents.
- La solution la plus simple, est certainement de valoriser la propriété “ProductKey” dans la séquence de tache chargée du déploiement d’un système.
Pour cela, ouvrez la console “Deployment Workbench“, sélectionnez votre séquence de tache chargée du déploiement d’un système au niveau de la rubrique “Task Sequences“. Utilisez ensuite le menu “Propriétés” puis sélectionnez l’onglet “Task Sequence“.
Sélectionnez le groupe “Initialization” puis le menu “Add … General … Set Task Sequence Variable“.
Note : Ne vous inquiétez-pas, la nouvelle tâche est affichée avec une icône rouge tant que vous n’aurez pas validé les changements et rafraîchi l’affichage.
Entrez dans le champ “Name” une description telle que “Set Default KMS Product Key” pour identifier la tâche.
Entrez la valeur “ProductKey” dans le champ “Task Sequence Variable” et la clé produit dans le champ “Value“.
Cliquez sur “Appliquer” puis sélectionnez de nouveau le groupe “Initialization” pour actualiser la tâche qui devrait apparaitre en vert.
Cliquez sur “OK” pour fermer la séquence de taches.
Il ne vous reste plus qu’à ajouter la directive “SkipProductKey=YES” au sein du fichier “CustomSettings.ini“.
Pour plus d’information sur la modification du fichier “CustomSettings.ini” et les clés KMS par défaut reportez-vous au tutoriel “Configuration avancée de MDT 2013”
Bonne découverte