En passant chez plusieurs clients, je me suis rendu compte que l’installation des langues supplémentaires pouvait parfois être incomplète. Le but de cet article est de traiter une méthode parmi de nombreuses possibles, permettant de déployer correctement des langues supplémentaires sur Windows 10 durant le déploiement de système d’exploitation (OSD) via System Center Configuration Manager.
Ceux qui connaissent un peu les méthodes récurrentes sur Internet, savent que System Center Configuration Manager ne comprend pas de tâche par défaut permettant le chargement en ligne ou hors ligne de packs de langue. Il faut souvent étendre le produit avec Microsoft Deployment Toolkit (MDT). Ceux qui me connaissent, savent que je suis relativement réticent à l’intégration de MDT à ConfigMgr et ce pour éviter toutes dépendances. Le but est de ne pas trainer une version qui viendrait freiner le rythme des mises à jour de Configuration Manager.
Bien souvent, les administrateurs chargent le pack de langues mais oublie toutes les fonctionnalités de langues supplémentaires qui peuvent être essentielles à l’expérience utilisateur (Cortana, reconnaissance du texte, etc.) de Windows 10. On retrouve notamment les éléments suivants :
- Microsoft-Windows-Client-Language-Pack_<Architecture>_-<Langue>.cab est typé par langue et architecture et correspond au texte de l’interface graphique.
- Microsoft-Windows-LanguageFeatures-Basic-<Langue>-Package.cab est typé par langue uniquement pour permettre la vérification de l'orthographe, la prédiction du texte, etc.
- Microsoft-Windows-LanguageFeatures-Handwriting-<Langue>-Package.cab est typé par langue pour permettre la reconnaissance de l'écriture manuscrite saisie par stylet.
- Microsoft-Windows-LanguageFeatures-Speech-<Langue>-Package.cab est typé par langue pour reconnaître les entrées vocales utilisées par Cortana et Windows Speech Recognition.
- Microsoft-Windows-LanguageFeatures-TextToSpeech-<Langue>-Package.cab est typé par langue pour permettre la synthèse de voix notamment utilisée par Cortana et le narrateur.
- Microsoft-Windows-LanguageFeatures-OCR-<Langue>-Package.cab est typé par langue pour permettre la reconnaissance et l’édition de texte dans une image.
Pour récupérer ces packages, on retrouve deux ISOs de fonctionnalités à la demande pour Windows 10 (Features on Demand) :
- Le pack de langue (premier dans la liste) est présent dans l’ISO Windows 10 Features on Demand Part 1.
- Les autres packages sont présents dans l’ISO Windows 10 Features on Demand Part 2.
Il est à noter qu’il est nécessaire de récupérer les nouvelles versions de ces packages pour chaque nouvelle version de Windows 10 (1709, 1803, etc.).
Passons à l’intégration à votre séquence de tâches, commencez par créer un dossier dans les sources de contenu que vous pouvez par exemple appeler : OSD Language Pack Windows 10 1709 fr-fr. Copiez l’ensemble des fichiers CAB à l’intérieur :
Procédez ensuite à la création d’un package sans programme dans System Center Configuration Manager pointant sur ces sources avec un nom similaire (par exemple : OSD Language Pack Windows 10 1709 fr-fr).
Une fois le package créé et distribué sur vos points de distribution, ouvrez votre séquence de tâches. Les packages doivent être chargés avant le démarrage du système d’exploitation. Je vous recommande de créer un groupe appelé Install Language Packs entre l’application de vos Drivers et le groupe Setup Operating System qui doit normalement enchainer sur l’étape Setup Windows and Configuration Manager.
Dans ce groupe, vous pouvez ajouter des étapes Run Command Line avec les lignes de commandes suivantes :
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-Client-Language-Pack_<Architecture>_-<Langue>.cab
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-LanguageFeatures-Basic-<Langue>-Package.cab
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-LanguageFeatures-Handwriting-<Langue>-Package.cab
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-LanguageFeatures-Speech-<Langue>-Package.cab
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-LanguageFeatures-TextToSpeech-<Langue>-Package.cab
DISM /Image:C:\ /add-Package /PackagePath:Microsoft-Windows-LanguageFeatures-OCR-<Langue>-Package.cab
Associez le package que vous avez précédemment créé et spécifiez un timeout.
Note : Vous pouvez remplacer C:\ par la variable (par exemple : %OSDisk%) que vous avez éventuellement spécifiée dans la tâche Apply Operating System pour stocker la partition sur laquelle le système d’exploitation a été appliqué. En outre, vous pouvez utiliser les cmdlets PowerShell à condition d’avoir ajouté les composants associés à votre image Windows PE. En effet, par défaut les images de démarrage n’incluent pas les composants : WinPE-DismCmdlets.
Sur l’écran qui suit, j’ai volontairement décorrélé chaque ligne de commande mais je vous recommande l’utilisation d’un script bat ou PowerShell qui inclut l’ensemble des commandes afin d’optimiser votre environnement de séquences de tâches. Plus vous ajoutez des tâches, plus ce dernier grossit en mémoire.
Ensuite dans les sources du package que vous avez créez, procédez à la création du script bat (par exemple SwitchTextSpeechFR.bat) suivant permettant l’édition des clés de registre nécessaire à l’activation des fonctionnalités Speech. Là encore, vous pouvez utiliser PowerShell si vous le souhaitez. Remplacez la langue par la langue que vous chargez.
Reg Load HKU\DefaultTemp "C:\Users\DefaultNTUSER.DAT"
Reg Add "HKU\DefaultTemp\Software\Microsoft\Speech_OneCore\Settings\SpeechRecognizer" /v RecognizedLanguage /t REG_SZ /d fr-FR /F
Reg UNLoad HKU\DefaultTemp
Note : Vous pouvez ajouter un côté dynamique à ce script en renseignant un paramètre pour définir dynamiquement la langue. C’est très utile pour éviter plusieurs scripts qui effectuent la même chose lorsque vous devez gérer plusieurs langues comme nous le verrons par la suite dans l’article.
Ajoutez ensuite une étape Run Command Line juste après le ou les étapes de chargement des packages. Cette étape doit exécuter le script bat et associant le package qui le contient.
Une fois ceci fait, vous devez aussi spécifier la langue qui sera utilisée par défaut par le système d’exploitation. Deux solutions sont possibles :
- L’utilisateur le définit lui-même lorsqu’il a ouvert la session. Ceci n’est clairement pas adapté dans un contexte d’entreprise.
- La langue est définie directement dans le déploiement de système d’exploitation au moment du chargement.
La seconde solution est possible en chargeant un fichier de personnalisation Unattend.xml dans la tâche Apply Operating System. Vous pouvez spécifier la langue en dur ou alors utiliser des variables de séquences de tâches. C’est la solution que je recommande pour plus de flexibilité. Vous devez créer un fichier Unattend.xml comprenant les éléments suivants :
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="specialize">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>%OSDInputLocale%</InputLocale>
<SystemLocale>%OSDSystemLocale%</SystemLocale>
<UILanguage>%OSDUILanguage%</UILanguage>
<UILanguageFallback>%OSDUILanguageFallback%</UILanguageFallback>
<UserLocale>%OSDUserLocale%</UserLocale>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>%OSDInputLocale%</InputLocale>
<SystemLocale>%OSDSystemLocale%</SystemLocale>
<UILanguage>%OSDUILanguage%</UILanguage>
<UILanguageFallback>%OSDUILanguageFallback%</UILanguageFallback>
<UserLocale>%OSDUserLocale%</UserLocale>
</component>
</settings>
</unattend>
Les variables suivantes sont définies :
- OSDInputLocale pour choisir la langue d'entrée et la méthode pour les périphériques d'entrée, tel le clavier.
- OSDSystemLocale spécifie la langue par défaut à utiliser pour les programmes non Unicode.
- OSDUILanguage attribue la langue de l’interface graphique.
- OSDUILanguageFallback spécifie la langue de l’interface graphique utilisée si celle spécifiée par défaut n’est pas présente. En général, on laisse la langue de l’image WIM que l’on applique par défaut (par exemple en-US).
- OSDUserLocale spécifie les paramètres par utilisateur utilisés pour formater les dates, heures, devises et nombres dans une installation Windows.
Note : Si vous ne souhaitez pas utiliser les variables, vous pouvez simplement les remplacer par le code de la langue (par exemple : fr-FR).
Vous pouvez sauvegarder le fichier dans le package que nous avons créé en tout début de ce billet.
Ouvrez ensuite la séquence de tâches et l’étape Apply Operating System. Cochez la case Use an unattended or Sysprep answer file for a custom installation. Spécifiez le package et le nom du fichier Unattend.xml :
Si vous devez gérer plusieurs langues et pour continuer dans la stratégie de cet article, vous pouvez créer des sous-groupes pour chaque langue dans le groupe Install Language Packs. Dans les options du groupe, vous pouvez ajouter une condition basée sur la variable de séquence de tâches %OSDUILanguage% et sa valeur (par exemple qui doit être égale à fr-FR).
Vous pouvez ensuite définir les variables citées plus haut de plusieurs façons :
- Manuellement sur chaque enregistrement machine en ouvrant les propriétés ou alors via l’assistant d’import d’un nouvel enregistrement machine pour de nouvelles machines.
- Sur les collections de déploiement en créant une collection de déploiement par langue. Vous pouvez les définir en ouvrant les propriétés de la collection.
- Dynamiquement par des solutions communautaires avec des assistants tels qu’
Bon déploiement !