Recently a customer of mine decided to skip creation of reference images for Windows 10 installation and instead apply all image customization dynamically during OSD. This includes removal of several UWP apps, capabilities as well as application installation and language pack injection. This approach, while detrimental to the installation duration, has its charms. The modifications are (in most cases) applicable to all Windows 10 versions and this dynamic approach allows to easily service 10+ countries with a single image.
- Usage of a second, custom task sequence specific CustomSettings.ini file containing task sequence specific rule collection.
- In addition, you will need some way to automatically determine target country in CustomSettings. Typically I implement a naming convention where the first 2 characters in computer name designate the country of origin and use a switch to select correct set of language packs and features on demand. You may come up with a different approach that suits your needs better.
Priority=ComputerNameAlias, SetLocale, Default Properties=OSDCountry [ComputerNameAlias] OSDCountry=#Left("%OSDComputerName%",2)# ; This section acts as a switch for language packs [SetLocale] Subsection=%OSDCountry%
This approach ensures that the deployment becomes much more dynamic and that leads to less hassle and more work done in less time.
- Download and open MDT-GenerateTSini.ps1 PowerShell script
Note: Make sure that the following variables match your environment: $con_list, $src_xml, $w10_ver, $w10_dir, $w10_ts
$con_lis = @("AT","BE","CH","DE","ES","GR","HU","LU","NL","PL","PT","RU","SE","TR") #lang list $src_xml = "\\MDT01\W10$\Control\Packages.xml" #package list $w10_ver = "10.0.14393.0" # W10 build number, has to match target OS build $w10_dir = "Windows 10 1607 Enterprise x64" #OS folder, required for .NET 3.5 sources $w10_ts = "10_1607" #Task Sequence ID
- Run the script. The script will parse Packages.xml file specified in the $src_xml variable and select packages’ names and GUIDs matching $w10_ver value.
The script will then proceed with the generation of CustomSettings_%TaskSequenceID%.ini file by creating the header section and will then populate the ini file by adding language packs’ GUIDs for each country specified in the $con_list variable.
Example: For Germany you will end up with the following entries:
[DE]Note: Based on the created CustomSettings_%TaskSequenceID%.ini, MDT will install multiple languages onto the same Windows 10 image. For each language, where available, it will add following components:
;Optical character recognition
- Language pack and the Basic components.
- (To preload Cortana features) Text-to-speech, and Speech recognition.
- Fonts and Optical character recognition for the most popular languages within a region to improve end user’s first experience (strongly recommended).
Note: If they’re not already installed, Windows downloads and installs them in the background when the user chooses that language for the first time.
- Handwriting recognition (for devices with pen inputs.)
Important: Not all capabilities are available for every language. Installation order matters due to various dependencies. Keep in mind that while the Windows 10 language packs are smaller, having too many can still affect disk space, and can affect performance, especially while updating and servicing Windows.
Finally, the script adds NetFX 3.5 source path based on the information provided in the $w10_dir variable.
- The resulting CustomSettings_%TaskSequenceID%.ini is located in the script’s folder. You will need to copy it to the Control folder located inside your Deployment Share.
- Some languages require more hard-disk storage space than others.
- Don’t add too many language packs at once, because the device may not have enough memory to handle it. General recommendations: from Windows PE, don't add more than 7. If WinPE is still running out of memory, you can customize WinPE by adding temporary storage (scratch space).
- Always install language packs before installing updates.
- The version of the language pack must match the version of Windows. The build number must also match.