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

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

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.

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.

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

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
" doesn't work anymore.
Thanks
Hi Roman,
I have updated the post to reflect the changes David has done in the newer versions of OSDBuilder.
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?
Keeping OSD Builder updated and using it to service images offline is an excellent way of doing it. For thick images with applications, a fully automated build and capture is a good option.
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!
I recommend a single task sequence that sets language via variables depending on location, or some other condition.