Using OSD Builder to Create a Multi-Language Windows 10 Image

Here is a quick guide on how to use #OSDBuilder from David Segura (@SeguraOSD) to create a Windows 10 1909 reference image with two language packs (German and Swedish), as well as with .NET Framework enabled. This guide contains of the following steps:

  • Installing OSD Builder
  • Import OS Media, with Language Packs, and run the Update
  • Keeping the OSD Builder platform updated

Note: Updated August 7, 2022, to support changes in OSD Builder 19.4.11

Requirements

In order to complete this guide, you need to have access to the following software:

  • Windows 10 Business Editions x64 1909 ISO
  • Windows 10 1903 Language Pack ISO
  • Windows 10 1903 Feature On Demand (FOD) ISO, Part 1

Note #1: Windows 10 1909 is using the same Language Packs and FOD's as Windows 10 1903. While language pack and FOD media in general can be downloaded from your VLSC access or via your Visual Studio subscription, Microsoft has not been very good in keeping older media available once the operating systems falls out of support. Windows 10 1909 reached end of life on May 11, 2021.

Note #2: You only need the Windows 10 1903 FOD ISO, Part 2, if you are adding the retail demo package, for use in retail stores selling PCs. You probably don't need this one 🙂

Installing OSD Builder

When using OSD Builder I've found it useful not only to create separate repositories for client and server images, but also for multi-language images. That can be done by using the -SetHome feature for OSDBuilder, or in my case, I use a separate Windows 10 1909 virtual machine for each build type. For more info about starting clean with the -SetHome feature, check this link: https://osdbuilder.osdeploy.com/docs/advanced/multilang-baseline/clean-start

The Windows 10 v1909 VM spec I use to build my Windows 10 Multi-Language image on.

1. On a Windows 10 PC, preferably the same version or newer than the OS Image you are updating, install the OSDBuilder by running the following command in an elevated PowerShell prompt (allow the installation of the Nuget provider):

Install-Module -Name OSDBuilder -Force

Note: If you already have an older version of OSDBuilder installed, run Get-OSDBuilder -UpdateModule to update it to the latest version.

2. Import the OSDBuilder module by running the following command in an elevated PowerShell prompt:

Import-Module -Name OSDBuilder -Force
Installing and importing the OSD Builder module.

Import OS Media, with Language Packs, and run the Update

This process imports Windows 10 Enterprise, adds Language Packs, adds .NET Framework to the image, and updates the media with the latest updates. In this example you add the German and Swedish language packs. Again, to follow this guide, you need the following media:

  • Windows 10 Business Editions x64 1909 ISO
  • Windows 10 1903 Language Pack ISO
  • Windows 10 1903 Feature On Demand (FOD) ISO, Part 1

Here follow the steps:

1. Mount the C:\ISO\Windows 10 Business Editions x64 1909.iso file by either double-clicking it, or by running the following command in an elevated PowerShell prompt:

Mount-DiskImage -ImagePath "C:\ISO\Windows 10 Business Editions x64 1909.iso"

2. Import and update the OS Media by running the following command:

Import-OSMedia -ImageName 'Windows 10 Enterprise' SkipGrid

3. Update the imported media with the latest updates by running the following command:

Get-OSMedia -OSMajorVersion 10 -OSReleaseId 1909 | Update-OSMedia -Download -Execute

4. Extract the Windows 10 1903 Language Pack ISO to the C:\OSDBuilder\Content\IsoExtract\Windows 10 1903 Language folder.

The Windows 10 1903 Language Pack ISO extracted.

5. Extract the Windows 10 1903 Feature On Demand (FOD) ISO, Part 1, to the C:\OSDBuilder\Content\IsoExtract\Windows 10 1903 FOD x64 folder.

The Windows 10 1903 Feature On Demand (FOD) ISO, Part 1 ISO extracted

6. Create a new content pack to hold the language pack files, by running the following command and then selecting the following items in the four grids view that are displayed:

New-OSBuildTask -TaskName "MultiLangBuild" -ContentLanguagePackages -EnableNetFX3
  • Select a Source OS Media… grid view: Windows 10 Enterprise x64 1909
  • Install.wim Language Packs… grid view: Select the DE and SE language packs
  • Install.wim Language Features… grid view: Select the DE and SE FODs
  • Install.wim Local Experience Packs… grid view: Click Cancel (you typically don't need any Language Interface Packs, or LIP)

Note #1: When adding multiple features on demand, I found it easier to run the preceding command multiple times, and then use filters like de-de and sv-se when adding the FOD's. OSDBuilder will add subsequent runs of the command to the same task.

Note #2: The old OSDBuilderContentPack command is no longer supported in OSDBuilder

Selecting the Windows 10 1909 media.

7. Copy the languages by running the following command:

Get-OSMedia -OSMajorVersion 10 -OSReleaseId 1909 | New-OSBuildTask -TaskName "MultiLangBuild" -SourcesLanguageCopy -EnableNetFX3

8. Create a new OS Build by running the following command

New-OSBuild -ByTaskName "MultiLangBuild" -Execute

10. Review the content created in the C:\OSDBuilder\OSBuilds folder.

Keeping the OSD Builder platform updated

As Microsoft release new updates, the OSD Builder platform must be updated too.

1. OSD Builder platform can be updated by running following command:

Get-OSDBuilder -UpdateModule

2. Update the previously imported image by running the following command:

Get-OSMedia | Where-Object Name -like 'Windows 10 Enterprise x64 1909*' | Where-Object Revision -eq 'OK' | Where-Object Updates -eq 'Update' | foreach {Update-OSMedia -Download -Execute -Name $_.Name}

3. Generate an updated OS Build by running the following command:

New-OSBuild -ByTaskName MultiLangBuild -Execute

Happy Deployment / Johan Arwidmark

About the author

Johan Arwidmark

5 1 vote
Article Rating
Subscribe
Notify of
guest
6 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Roman
Roman
1 year ago
Can you Update the article? the command "New-OSDBuilderContentPack -Name "MultiLang DE" -ContentType MultiLang

" doesn't work anymore.

Thanks

Joerg
Joerg
3 years ago

What is the best way to keep the "OS" updated? Write a script to update osdbuilder and then the "OS"? If yes, what would be the best way?

James
James
3 years ago

What is best practice when dealing with multiple languages? Each language gets its own task sequence? One task sequence that deploys the language based on input/variables? Previously I have only deployed a task sequence in English but now my company has locations in South America, Italy, and Germany. I am unsure as to the best course of action.

I always appreciate your posts and what you do for the community!


>