21/12/2024

Déploiement MDT - WDS

MDT – Exploration approfondie des séquences de taches

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"

MDT06-img01

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.

MDT06-img02

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.

MDT06-img03

Cliquez sur "Next",

MDT06-img04

 

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".

MDT06-img05

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 :

MDT06-img06

 

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.
    MDT06-img07
  • 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.

MDT06-img08

 

    • "Task Sequence Variable" - Permet de tester la valeur d'une variable d'environnement MDT

MDT06-img09

 

    • "Operating System Version" - Permet de tester la version et l'architecture du système d'exploitation

MDT06-img10

 

    • "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)

MDT06-img11

    • "Registry Setting" - Permet de tester la présence, l'absence ou la valeur d'une clé de registre.

MDT06-img12

 

    • "Installed Software" - Permet de tester si un package d'application fait partie des produits déjà installé.

MDT06-img13
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.

MDT06-img14

 

    • "File Properties" - Permet de tester la présence d'un fichier et éventuellement contrôler sa version et/ou sa date de création.

MDT06-img15

 

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.

MDT06-img26
Copie ou deplacement des sources de l'application fictive

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"

MDT06-img27
Commande d'installation de l'application

Cliquez ensuite 2 fois sur "Next" et enfin sur "Finish".

Recommencez ces opérations pour chacune des plateformes virtuelles supportées.

MDT06-img28
Contenu du dossier "Virtual Tools" sous "Applications"

 

 

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".

MDT06-img16

Créez ensuite un nouveau "sous-groupe " pour chacune des plateformes désirées, comme par exemple "Hyper-V", "VMware", "XenServer","VirtualBox".

MDT06-img17
Groupes de plateforme (Séquence de taches)

 

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.

MDT06-img31
Séquence de taches dédiée aux tests

 

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 :

MDT06-img18

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".

MDT06-img19

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"

MDT06-img20

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.

MDT06-img21

Cliquez sur "OK" pour valider ce choix.

MDT06-img22

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.

MDT06-img29
Séquence de taches pour test unitaire

Cliquez sur les boutons "Next" puis "Begin". Vous devriez voir l'affichage suivant, correspondant au script de l'application correspondante à la plateforme concernée.

MDT06-img30
Résultat sur une VM Hyper-V

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. 🙂

MDT06-img32
Autre exemple de résultat dans une VM sous VMware

 

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 :

MDT06-img23

 

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 [<component name=”Microsoft-Windows-Shell-Setup”]
  • 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.

MDT06-img24

 

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.

MDT06-img25

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

author avatar
Christophe Mandin Consultant - Formateur indépendant
Consultant/Formateur indépendant en quête de solutions et de moyens alliant efficacement la théorie et la pratique. Fort d’une expérience de plusieurs dizaines années dans l’informatique, j’ai pu apprécier de nombreuses problématiques, développer des qualités rédactionnelles et un esprit de synthèse, tout en me forgeant de solides fondamentaux théoriques, indispensables à toute analyse et mise en œuvre fonctionnelle. Malgré toutes ces années, je ne me lasse pas du plaisir de transmettre mes connaissances en misant sur 3 critères que sont les fondamentaux, la simplicité et le pragmatisme. Bien à vous. Retrouvez-moi sur LinkedIn : Christophe Mandin
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “MDT – Exploration approfondie des séquences de taches

  • Excellent !!
    Beaucoup d’info pertinentes !!.
    je vais approfondir l’article (et les autres).

    j’ai attaqué le basculement sur du MDT2013 au début du mois (précédemment en MDT2010), pour du déploiement de Win10.

    Je constate au fur et à mesure des problèmes (ou plutôt des choses à creuser..), notamment les « .esd » que j’essayais d’intégrer directement dans MDT (message d’erreur puisque crypté), le principe des « Restore Point » (impossible de schedulé les snaps) et du « File History »…
    A ce sujet, et sauf erreur de ma part, il ne semble pas être possible de scripter , ni de l’intégrer dans MDT !! ???
    Avez-vous essayer ?

    Encore merci pour cet/ces article(s) !!

    david
    (Tech Système dans une Collectivité)

    yfoyaka arobase Hotmail point fr

    Répondre
  • Bonjour et merci de ce déroulé d’informations précieuses.
    cependant je cherche à tester dans ma séquence de tâches, une variable qui permette d’identifier la version de w10.
    en effet je déploie des applis différentes sur w10-1809 et w10-1903.
    Y a t il une possibilité ?

    Répondre
    • Bonjour Bruno,
      A mon avis, il y a surement plusieurs approches possibles mais perso, j’opterais pour une déclaration conditionnelle de variable custom comme ici (https://deploymentresearch.com/creating-custom-variables-in-mdt-2013/) et pour chaque tache « Set CustomVariable W10-xxxx » mettre une condition sur la valeur clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentBuild selon le tableau https://docs.microsoft.com/en-us/windows/release-information/
      Il faut bien sur positionner ces actions après le déploiement de l’OS et avant l’installation des applis. Celles-ci seront à conditionner sur la valeur de la CustomVariable
      C’est plus facile à faire qu’a expliquer 🙂

      Bonne continuation

      Répondre
  • Bonjour,
    Pouvez vous m’aider sur ce sujet ?

    Je souhaite lors du déploiement d’un poste pouvoir afficher la liste des OU ou seront intégrés les postes dans le domaine. j’ai vu que c’est possible sur MDT 2012.

    Pouvez vous m’aider svp.

    merci

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.