I am attending Expert Live Europe this week. Between sessions, meeting new people and (obviously) partying, I wanted to talk about language packs management. More specifically, automating language packs management because I would rather spend 2 hours automating something before spending 15 minutes on a boring, manual task.
Apologies for sounding like a record stuck in a groove, but the thing is: in the time where everything happens so rapidly: we are now seeing Windows Insider Preview every other week, we have production releases of Windows 10 twice a year. The fast cadence of Windows feature updates means that you need to keep your language packs up-to-date which can become a daunting and actually a pretty boring task. The good news is that you can simplify your language packs management by leveraging Microsoft Deployment Toolkit's PowerShell module meaning you can import or update all of the language packs that will be needed into your MDT Deployment Workbench in a fingersnap.
For Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), language packs have been split into language components and Features On Demand V2 (Capabilities).
You can install multiple languages onto the same Windows 10 image. For each language, where available, you should add following language packages to your images:
- Add the language pack and the Basic components.
- To preload Cortana features, also add the Text-to-speech and Speech recognition.
- Add Fonts and Optical character recognition for the most popular languages within a region to improve your user’s first experience.
- Add handwriting recognition for devices with pen inputs.
If you do not add language specific features on demand during deployment your Windows systems will request missing feature packages from Windows Update trying to download and install them in the background when the user logs in for the first time. Aside from the usual network related concerns, keep in mind that you need administrative priviledges to install features on demand. If you are running standard user model in your environment (which you should), your end users will end up with annoying pop up messages in the notification center detailing that vital parts of the OS are missing leading to end user confusion and increased help desk calls.
How does it work:
To import language packs and features on demand, follow these steps:
- Download current Windows 10 Enterprise language pack and features on demand ISO files from the Volume Licensing Service Center (VLSC).
As Michael Niehaus wrote a while back, with Windows 10 1507 and 1511, you could select Windows 10 Enterprise Language Pack, click Download and then select English and 64-bit to see the downloads. But that doesn’t work with the Windows 10 1607 language packs. Instead, you need to select Multilanguage from the drop-down list of languages to see the new ones. Features on demand are easy, search for Windows 10 Enterprise Features on Demand and you’ll see all three releases in the list.
- Copy the content of both ISO files (language packs / features on demand) to the \\UNCShare\Import\LANGUAGE_PACKS\MultiLang_Feat_on_Demand_%W10Version% folder.
Example: \\MDT01\C$\Import\LANGUAGE_PACKS\MultiLang_Feat_on_Demand_1703 - Open MDT-ImportLanguagePacks.ps1 PowerShell script. Adjust following variables to match your environment:
$mdt_root = "\\MDT01\W10$\" #UNC or local $w10_build = "1607" $w10_rel = "Windows 10 " + $w10_build + " x64" $lan_lis = @("de-de","fr-fr","es-es","el-gr","hu-hu","it-it","nl-nl","pl-pl","pt-pt","ru-ru","sv-se","tr-tr") #list of languages to import into MDT $src_dir = "\\MDT01\C$\Import\LANGUAGE_PACKS\MultiLang_Feat_on_Demand_" + $w10_build
Note: Make sure that the following variables match your environment: $mdt_root, $w10_build, $lan_lis, $src_dir. Pay close attention to the $w10_build variable. It has to match %W10Version% - if it doesn’t, the script will not be able to determine source folder. - Run the script.
The script will first create a package repository. It is the key to successful management of language packs for MDT as well as for any other deployment solution. In the MultiLang_Feat_on_Demand_%W10Version% folder, the script will copy feature files into corresponding %language_code% subfolders.
Example: For Redstone 1 release you will end up with the following folder structure:
- MultiLang_Feat_on_Demand_1607
- de-de
- fr-fr
- es-es
- el-gr
- ...
- tr-tr
When you import packages to the MDT package repository, MDT creates a single instance folder structure. However, you can, and should, mimic the package structure of your language pack source repository in the Deployment Workbench. The script accomplishes this by creating logical folders in the Deployment Workbench.
Example: For Redstone 1 release you will end up with the following logical folder structure in MDT:
- Packages
- Language Packs
- Windows 10 1607
- de-de
- fr-fr
- es-es
- el-gr
- ...
- tr-tr
- Windows 10 1607
- Language Packs
The preceding folder names are selected purely for readability.
The script will then import language packs as well as applicable features on demand packages into corresponding subfolders in MDT.
That's it! In one of the next blog post I'll explore how to take imported packages and generate a task sequence specific CustomSettings.ini.