MDT - Guide de résolution des problèmes courants de configuration lors du déploiement d'un système d'exploitation Microsoft


Introduction

Microsoft Deployment Toolkit (MDT) est une suite d'outils gratuits destinée à simplifier le déploiement d'ordinateurs de bureau, portables et de serveurs. Elle permet notamment de créer une image de référence de base, appelée également image dorée, ou une solution de déploiement complète. Récemment, j'ai travaillé sur la mise en place d'un environnement MDT avec les dernières versions de Windows ADK et MDT, mais j'ai dû faire face à de nombreux problèmes qui ont nécessité un dépannage important. Dans ce billet, je vais donc décrire les défis que j'ai rencontrés lors de la construction de cet environnement MDT.

Dans cette article, on va voir comment en 2023, on peut encore utiliser MDT avec l'ADK de Windows 11.

Les ressources necessaires pour réaliser vos tests

Voici machines virtuelles qui ont été utilisées pour construire et tester l'environnement MDT :
Système d'exploitation vCPU vMEM vDisk Bios
Windows Server 2022 Standard edition 2vcpu 4GO Ram 50GO (OS)
100GO (DATA)
Par défaut
Windows 10 x64 22H2 Enterprise edition 2vcpu 4GO Ram 48 GO UEFI
TPM actif
Windows 10 x64 22H2 Enterprise edition 2vcpu 4GO Ram 48 GO BIOS LEGACY
Windows 11 x64 22H2 Enterprise edition 2vcpu 4GO Ram 48 GO UEFI
TPM actif

Il est préférable d'avoir un ordinateur avec 16go minimum avec un processeur avec plusieurs cœurs (Ryzen ou Core i5 ou i7). Si vous avez un ordinateurs portables, vérifier que votre ordinateur est en processeurs qui fini par H. 

Liens :

Le lien permanent pour trouver la dernière version pour télécharger et installer le dernier Windows ADK :  https://aka.ms/ADK

Téléchargez l’ADK Windows pour Windows 11, version 22H2.

Téléchargez le module complémentaire PE Windows pour le kit ADK Windows pour Windows 11, version 22H2.

Téléchargez le Microsoft Deployment Toolkit, version 8456

Si votre machine serveur peut se connecter à internet, et que vous avez winget, voici les commandes :


    & winget install -e --id Microsoft.WindowsAD -i  
    & winget install -e --id Microsoft.ADKPEAddon -i
    & winget install -e --id Microsoft.DeploymentToolkit

ADK pour Windows 11 ne prend pas en charge x86

Windows ADK pour Windows 11, version 22H2, ne comprend plus WinPE x86 et ne créera pas le répertoire x86 dans le répertoire d'installation d'ADK. L'ouverture des paramètres WinPE dans les propriétés du déploiement montrera l'erreur suivante :
MMC a détecté une erreur dans un complément et le déchargera lors de l'ouverture de la configuration de Windows PE.

Vous devrez créer manuellement un répertoire x86 WinPE vide pour résoudre le plantage de l'outil de déploiement.
  • Accédez au répertoire d'installation de Windows ADK : "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment"
  • Créez un nouveau dossier, nommez-le : x86
  • Créez un nouveau dossier dans le dossier x86, nommez-le : WinPE_OCs
Via PowerShell : 

#Requires -RunAsAdministrator
# Requires the script to be run as an administrator

# Try block to handle errors
Try {
    # Check if the system architecture is AMD64 (64-bit)
    if ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64'){
        # Set the path to the Windows Preinstallation Environment (WPE) for 64-bit systems
        $WPE = $((Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots").KitsRoot10) + "Assessment and Deployment Kit\Windows Preinstallation Environment"
    } else {
        # Set the path to the Windows Preinstallation Environment (WPE) for 32-bit systems
        $WPE = $((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots").KitsRoot10) + "Assessment and Deployment Kit\Windows Preinstallation Environment"
    }
} Catch {
    # If an error occurs, install the necessary components using 'winget' and exit the script
    & winget install -e --id Microsoft.WindowsAD -i
    & winget install -e --id Microsoft.ADKPEAddon -i
    exit
}

# Check if the path to the 32-bit WPE directory exists, if not, create it
if ((test-path $($WPE + "x86")) -eq $false){
    New-Item -Path $($WPE + "\x86") -ItemType Directory
}

# Check if the path to the WinPE_OCs directory exists, if not, create it
if ((test-path $($WPE + "x86\WinPE_OCs")) -eq $false){
    New-Item -Path $($WPE + "\x86\WinPE_OCs") -ItemType Directory
}

Lors du premier démarrage de l'environnement de pré installation de Windows (WinPE), un message d'erreur apparaît.

Un autre effet secondaire de l'utilisation de Windows ADK pour Windows 11 est que les applications HTML (HTA) cessent de fonctionner car le moteur de script par défaut qui incluait auparavant MSHTML a changé à partir de Windows 11. Ce changement est la cause de votre séquence de tâches qui fournit une erreur de script directement après le démarrage PXE.
Le message en question
Une erreur s'est produite dans le script de cette page au début de la séquence de tâches.
Pour corriger cette erreur de script, vous pouvez ajouter la valeur de registre suivante dans WinPE

  • Accédez à C:\Program Files\Microsoft Deployment Toolkit\Templates
  • Copiez Unattend_PE_x64.xml vers un emplacement de sauvegarde, au cas où
  • Modifiez Unattend_PE_x64.xml
  • Remplacez le contenu de Unattend_PE_x64.xml par :
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component language="neutral" name="Microsoft-Windows-Setup" processorarchitecture="amd64" publickeytoken="31bf3856ad364e35" versionscope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<display>
<colordepth>32</colordepth>
<horizontalresolution>1024</horizontalresolution>
<refreshrate>60</refreshrate>
<verticalresolution>768</verticalresolution>
</display>
<runsynchronous>
<runsynchronouscommand wcm:action="add">
<description>Lite Touch PE</description>
<order>1</order>
<path>reg.exe add "HKLM\Software\Microsoft\Internet Explorer\Main" /t REG_DWORD /v JscriptReplacement /d 0 /f</path>
</runsynchronouscommand>
<runsynchronouscommand wcm:action="add">
<description>Lite Touch PE</description>
<order>2</order>
<path>wscript.exe X:\Deploy\Scripts\LiteTouch.wsf</path>
</runsynchronouscommand>
</runsynchronous>
</component>
</settings>
</unattend>
  • Mettez à jour le déploiement partagé et choisissez de régénérer complètement les images de démarrage.

Problème de démarrage PXE sur les périphériques UEFI

Le démarrage PXE sur les appareils UEFI peut s'arrêter à l'étape "Starting PXE over IPV4". C'est un problème connu qui peut être résolu en désactivant NetBIOS sur TCP/IP.

  • Ouvrez les paramètres Réseau et Internet sur votre serveur MDT.
  • Cliquez sur Modifier les options d'adaptateur.
  • Ouvrez les propriétés de votre adaptateur réseau.
  • Ouvrez le Protocole Internet version 4 (TCP/IPv4).
  • Cliquez sur Avancé et accédez à l'onglet WINS.
  • Désactivez NetBIOS sur TCP/IP dans les paramètres de NetBIOS.
  • Désactivez NetBIOS sur TCP/IP pour éviter les problèmes de démarrage PXE.

Désactivez NetBIOS sur TCP/IP pour éviter les problèmes de démarrage PXE


Activer Bitlocker en attendant l'activation

L'activation de Bitlocker et le stockage de la clé de récupération dans votre annuaire Active Directory sont des étapes par défaut dans la séquence de tâches de MDT. La séquence de tâches s'est terminée avec succès, mais la clé de récupération n'a pas été stockée dans Active Directory.

"L'attente d'activation de Bitlocker" s'affiche lors de la vérification du statut de chiffrement Bitlocker sur le client récemment installé. Cette erreur est survenue en raison d'une défaillance de pré-vérification dans l'étape Enable Bitlocker de la séquence de tâches.

Bitlocker attend l'activation, ce qui empêche son activation.

Le fichier ZTIBDE.log affiche l'erreur suivante : FAILURE: False: Verify %OSSKU% is defined. The “verify %OSSKU% is defined

Vous devez supprimer la vérification préalable de cette étape de la séquence de tâches afin d'activer avec succès le chiffrement du lecteur Bitlocker :
  • Ouvrez l'emplacement des données du partage de déploiement sur le serveur MDT.
  • Accédez au dossier "Scripts".
  • Copiez ZTIBde.wsf vers un emplacement de sauvegarde, au cas où.
  • Modifiez ZTIBde.wsf.
  • Recherchez la section ci-dessous et supprimez-la complètement.
'//---------------------------------------------------------------------------- '// Check to see if BDE is supported in this OS '//---------------------------------------------------------------------------- '// Check to see if we are running Vista or later and exit if we are not '//If iOSCVMajor < 6 Then '//oLogging.CreateEntry "Bitlocker is not supported on this version of Windows", LogTypeInfo '//Main = iRetVal '//Exit Function '// Check to see if the SKU supportes Bitlocker '//ElseIf not oUtility.IsHighEndSKU then '//oLogging.CreateEntry "Bitlocker is only supported on Windows Enterprise or Windows Ultimate or Windows Server", LogTypeInfo '//Main = iRetVal '//Exit Function '//Else '//oLogging.CreateEntry "We are running a OS that supports BitLocker", LogTypeInfo '//End if
  • Sauvegardez le fichier ZTIBde.wsf et relancez la séquence de tâches ; maintenant Bitlocker chiffrera le disque et stockera la clé dans Active Directory.

Création d'une image de référence : Échec de l'exécution de Sysprep

La création d'une image de référence, comprenant les dernières mises à jour de Windows et des applications personnalisées, se déroulait bien jusqu'à l'étape de Sysprep. Sysprep se termine constamment par un plantage avec l'erreur suivante : FAILURE ( 6192 ): ERROR – Sysprep did not complete successfully.

Sysprep n'a pas pu être terminé avec succès et a affiché une erreur lors du démarrage de l'étape de sysprep.

Après plusieurs jours de recherche, j'ai finalement trouvé la cause de ce plantage, en raison du manque de détails d'erreur appropriés dans les fichiers journaux.

J'utilisais un pilote NIC personnalisé pour mon client VMware (VMXNet3) afin d'améliorer les performances réseau. Le pilote VMXNet3 était injecté au début de la séquence de tâches.

Sysprep a supprimé le pilote injecté et n'a donc pas pu effectuer la sysprep de l'image de référence. Le problème a été résolu après avoir utilisé la carte réseau VMware E1000 par défaut, qui est disponible dans WinPE.

Lors de la création d'une image de référence sur un système UEFI, vous rencontrez une erreur indiquant “can not find script LTIBootstrap.vbs”

Vous rencontrez une erreur spécifique lors de l'exécution de Sysprep sur des machines virtuelles en mode UEFI dans VMware. Cette erreur n'apparaît pas sur les machines virtuelles en mode BIOS hérité

.

L'erreur "Cannot find script for 'C:\LTIBootstrap.vbs'" se produit à l'étape d'exécution de Sysprep, et la séquence de tâches devrait redémarrer et revenir à WinPE, mais elle redémarre plutôt dans Windows. Ce bogue est causé par un redémarrage Windows en attente. L'étape de sysprep redémarre la machine virtuelle, mais MDT a déjà configuré la machine virtuelle pour redémarrer dans WinPE, donc le redémarrage Windows en attente persiste.

Cette erreur peut être résolue en ajoutant une étape "Redémarrer l'ordinateur" juste avant l'étape de création d'image dans l'étape de restauration de l'état (State Restore).

Durée de chargement du fichier .WIM par PXE

Le chargement du fichier .WIM (Litetouch.WIM) via PXE prenait environ 1 minute, mais du jour au lendemain, il a commencé à prendre jusqu'à 3,5 heures pour se charger.

Ce problème a été résolu en désactivant l'extension de fenêtre variable (Variable Window Extension) et en définissant une taille de bloc maximale dans Windows Deployment Services (WDS). Par défaut, cette valeur était définie sur 0 dans mes paramètres WDS.

Voici les étapes à suivre :

  • Ouvrez Windows Deployment Services (WDS).
  • Accédez aux propriétés de votre serveur WDS.
  • Naviguez vers l'onglet TFTP.
  • Définissez la taille de bloc maximale (Maximum Block Size) sur 16384.
  • Décochez la case "Enable Variable Window Extension" pour désactiver l'extension de fenêtre variable.
  • Ces ajustements permettront d'améliorer les performances de chargement du fichier .WIM via PXE et de réduire considérablement le temps de chargement.

Problème avec le Secure Boot sur Windows Server 2022

La mise à jour KB5022842 de Microsoft peut provoquer une interruption du démarrage sécurisé (Secure Boot) de Windows Server 2022 hébergé sur VMware ESXi 6.7 U3 ou VMware ESXi 7.0.X. Toutefois, VMware a corrigé ce problème avec ESXi 7.0 U3.

Si vous utilisez VMware ESXi 7.0.X, il est recommandé de mettre à jour votre environnement vers ESXi 7.0 U3 pour résoudre ce problème de démarrage sécurisé.

Assurez-vous de vérifier les notes de mise à jour de VMware ESXi et de suivre les recommandations du fabricant pour garantir un fonctionnement correct et sécurisé de votre environnement VMware avec Windows Server 2022.

L'installation de la mise à jour KB5022842 peut entraîner une erreur de violation de sécurité (Security Violation Error) dans Windows Boot Manager, en raison d'un problème lié au démarrage sécurisé (Secure Boot).

Toutefois, Microsoft a publié une nouvelle mise à jour le 14 mars (KB5023705) qui résout ce problème.

Si vous rencontrez cette erreur et ne pouvez pas installer la mise à jour KB5023705, une solution de contournement consiste à désactiver le démarrage sécurisé (Secure Boot) sur votre machine virtuelle Windows Server 2022.

Veuillez noter que la désactivation du démarrage sécurisé peut réduire la sécurité de votre système, il est donc recommandé de l'activer dès que vous avez installé la mise à jour appropriée (KB5023705) pour résoudre ce problème.

Assurez-vous de suivre les recommandations de Microsoft et de VMware pour garantir un fonctionnement sécurisé de votre environnement.

Échec du déploiement sur les systèmes basés sur le BIOS

La séquence de tâches MDT échoue sur les systèmes basés sur le BIOS car le micrologiciel du BIOS est incorrectement identifié comme UEFI.

Le message d'erreur:

Failure (5616) 15299 Verify BCDBootEx

LiteTouch deployment failed, Return Code = 2147467259 0x80004005

Failed to run the action: Install Operating system

Unknown error (error: 000015F0, Source: Unknown)

L'erreur "Failure (5616) 15299 Verify BCDBootEx" est causée par une identification incorrecte du firmware BIOS en tant qu'UEFI. Microsoft a corrigé ce problème avec la mise à jour KB4564442.

Pour résoudre ce problème, vous pouvez télécharger le correctif à partir du lien suivant : https://download.microsoft.com/download/3/0/6/306AC1B2-59BE-43B8-8C65-E141EF287A5E/KB4564442/MDT_KB4564442.exe

Assurez-vous de télécharger et d'appliquer le correctif approprié à votre système. Suivez les instructions fournies par Microsoft pour l'installation du correctif afin de résoudre l'erreur "Failure (5616) 15299 Verify BCDBootEx".

N'oubliez pas de redémarrer votre système après l'installation du correctif pour que les changements prennent effet.

802.1X ne fonctionne pas correctement avec Windows 11 ADK

Avec le dernier module ADK Windows 11, le service Dot3Svc ne démarre pas par défaut. Si vous utilisez le NAC (Network Access Control) pendant le déploiement du système d'exploitation, vous risquez de rencontrer un problème lors de la mise à niveau vers l'ADK Windows 11 (version 10.1.22000.1).

802.1X est un standard lié à la sécurité des réseaux informatiques, mis au point en 2001 par l'IEEE (famille de la norme IEEE 802).

Il permet de contrôler l'accès aux équipements d'infrastructures réseau (et par ce biais, de relayer les informations liées aux dispositifs d'identification).

Problème 1 :

Pour utiliser 802.1X, il est nécessaire d'ajouter le package WinPE-Dot3svc à votre image WinPE. Cependant, même si vous ajoutez ce package, le service Dot3svc ne démarre pas dans Windows PE. Cela est dû au fait que Microsoft a oublié d'inclure un fichier DLL (mobilenetworking.dll) lors de la création du package WinPE-Dot3Svc.

Pour contourner ce problème, vous pouvez copier le fichier mobilenetworking.dll dans le dossier System32 de WinPE (selon la façon dont vous utilisez WinPE, cela peut nécessiter de monter manuellement l'image et de copier le fichier à la main).

Le fichier mobilenetworking.dll peut être trouvé dans une version régulière/complète de Windows 11 Pro/Enterprise. Il vous suffit de récupérer le fichier à partir de là.

Pour contourner ce problème, vous pouvez copier le fichier mobilenetworking.dll dans le dossier System32 de WinPE (selon la façon dont vous utilisez WinPE, cela peut nécessiter de monter manuellement l'image et de copier le fichier à la main).

Problème 2 :

Maintenant, grâce à la solution de contournement du Problème 1, nous pouvons démarrer le service dot3svc ! Cependant, vous pourriez encore rencontrer des problèmes d'authentification 802.1x.

Pour résoudre ce problème spécifique, vous devez ajouter certaines clés de registre à votre image WinPE :

   Clé : HKLM\WinPE\ControlSet001\Services\EAPHost

   Nom : UseLegacyTlsStack

   Type : REG_DWORD

   Valeur : 1

Une fois que la ruche correcte est chargée, vous pouvez ajouter la valeur de registre requise de cette manière : reg add HKLM\WinPE\ControlSet001\Services\EAPHost /t REG_DWORD /v UseLegacyTlsStack /d 1

Cela devrait probablement être fait en montant le fichier Wim de WinPE, puis en chargeant la ruche System de votre WinPE en exécutant : reg.exe load HKLM\WinPE Mount Path\Windows\System32\Config\SYSTEM

Une fois que la ruche correcte est chargée, vous pouvez ajouter la valeur de registre requise de cette manière : reg add HKLM\WinPE\ControlSet001\Services\EAPHost /t REG_DWORD /v UseLegacyTlsStack /d 1

Enfin, vous devez décharger la ruche système en exécutant : reg.exe unload HKLM\WinPE Mount Path

Démontez le fichier WIM et validez les modifications. Cela devrait résoudre le problème d'authentification 802.1x.

Win 10 22H2 l'integration Language pack

Depuis l'édition de Mai 2022, les isos de windows 10 22h2 ont un bogue très surprenant, on a un message qui va faire boucler sur un message "Pourquoi votre ordinateur a redémarrer ?".
La solution que vous avez trouvée pour gérer un déploiement MDT multilingue semble prometteuse. Elle implique l'ajout d'une variable pour stocker la langue que vous souhaitez ajouter. Voici les étapes à suivre :
  1. Modifier le fichier CustomSettings.ini
  2. Ajoutez une variable appelée TEMP_UILang à la section [Settings] du fichier CustomSettings.ini.[Settings]
    Priority=Init,TaskSequenceID,ByVMType,ByDesktopType,Make,Default
    Properties=MyCustomProperty,TEMP_UILang
    
    [Init]
    TEMP_UILang=NotSet
  3. Créer le script ForceUILanguage.wsf : Ce script forcera la langue de l'interface utilisateur à "en-us" pendant le processus de déploiement. Placez-le dans le dossier Scripts\Misc\Tools de votre partage de déploiement MDT.
    <job id="TEMP_UILanguage">
    <script language="VBScript" src="..\..\ZTIUtility.vbs"/>
    <script language="VBScript">
    
    Option Explicit
    
    Dim iRetVal
    iRetVal = 0
    
    On Error Resume Next
    iRetVal = ZTIProcess
    ProcessResults iRetVal
    On Error Goto 0 
    
    Function ZTIProcess()
        
        oLogging.CreateEntry oUtility.ScriptName & ": Starting User Language Settings", LogTypeInfo
        
        Dim sUILang
        sUILang = oEnvironment.Item("UILANGUAGE")
        
        If Trim(LCase(sUILang)) <> "en-us" then
            oEnvironment.Item("UILANGUAGE") = "en-us"
        End If
        
        oEnvironment.Item("TEMP_UILang") = sUILang
        
        oLogging.CreateEntry oUtility.ScriptName & ": Finished Settings", LogTypeInfo
    End Function
    </script>
    </job>
  4. Créer une application : Créez une application dans MDT qui contient un script PowerShell appelé Set-UserLang.ps1. Ce script utilise la variable TEMP_UILang pour définir la langue de l'utilisateur à l'aide de commandes PowerShell telles que Install-Language et Set-WinUILanguageOverride.
    $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
    $UILang = $tsenv.Value("TEMP_UILang") Install-Language -language $UILang -CopyToSettings Set-WinUILanguageOverride -language $UILang
  5. Ajouter une étape dans la séquence de tâches "Exécuter une ligne de commande" avant de créer le fichier Unattend.xml "Configure" "cscript.exe "%SCRIPTROOT%\ZTIConfigure.wsf"".
    Type : Run Command Line
    Name : Force UILang to en-us
    Description : Force Windows installation to en-us (unattended)
    Command : cscript.exe "%SCRIPTROOT%\Misc\Tools\ForceUILanguage.wsf"
  6. Lancer l'application PowerShell : Dans votre séquence de tâches, après l'étape de préparation du système d'exploitation, ajoutez une étape pour exécuter l'application PowerShell Set-OSUserLang, qui contient le script Set-UserLang.ps1. Cette étape définira la langue de l'utilisateur en fonction de la valeur de TEMP_UILang.
En suivant ces étapes, vous devriez pouvoir contrôler la langue de l'interface utilisateur et de l'utilisateur pendant le processus de déploiement MDT. N'oubliez pas de tester la solution en profondeur et de l'adapter selon vos besoins spécifiques.

Conclusion

Microsoft ne travaille plus sur le produit MDT, mais avec toutes ces astuces, on peut s'en sortir. Cependant, le dernier clou dans le cercueil va venir avec l'arrêt en natif de la prise en charge du Vbscripts. La configuration prend plus de temps et vous rencontrerez des problèmes inhabituels lors de la mise en œuvre de MDT.

Si vous souhaitez plus d'informations sur MDT ou si vous avez des questions, n'hésitez pas à vous rendre sur ce lien .

Commentaires

Posts les plus consultés de ce blog

Powershell - Supprimer Teams sur l'ensemble des profils utilisateurs

Powershell - Comment tester les ports TCP ?

MRemoteNG - Voir les mots de passe dans l'application