Offline WIM Servicing

Ok, my first blog post and I’m going to dive right in on how I produce an offline serviced WIM that’s fully patched and streamlined for use within my company.

The key to all of this is the OSDBuilder framework from David Segura

Full details of his PowerShell framework are documented here and are incredibly detailed. If you want to know all about how it works down to the fine detail then please go take a look. Otherwise click below to dive on in and see how I make use of it.

For my organisation, my specific requirements are as follows

  • To produce an en-GB localised WIM with no additional languages or language features present
  • For that WIM to be fully patched with the most recent SSU and CU
  • NetFX3 to be enabled
  • Removal of specific AppX packages that are not required in our Enterprise
  • Additional of the Telnet Client as a single feature

All of the above can be achieved using OSDBuilder. I did have some teething problems initially with the language side of things because I was using the en-US media as my starting point. After a very helpful discussion with David on Twitter, he recommended I use International English media as my starting point which is already en-GB. With that I no longer needed to to manipulate the language files and all my problems went away.

This post will only detail the specific steps I undertook to produce a fully serviced, slightly customised offline WIM for Windows 10 v1903. OSDBuilder offers a plethora of customisation options but I’m going to stick with the basics to get you up and running. It still might be a long post so persevere with me.

First up a couple of pre-reqs.

  • Internet access, duh, obviously.
  • Admin rights over the machine on which you will be performing the WIM servicing. This can either be your own PC or a dedicated VM.

I’m not going to cover how to install OSDBuilder as David covers all that on his main site here

David releases regular updates to the code so follow him on Twitter to make sure you know when to update.

One specific error I did run into when installing for the first time was the installer complaining about not being able to find anything. This could be the case if you are behind a corporate Proxy as we are here.

Take a look here which will hopefully solve that issue for you as it did me.

Once it’s installed, just run this command


to confirm the framework has indeed installed itself.

By default OSDBuilder will use C:\OSDBuilder as the home for all your work. You can change it if you like as shown below, or go with the default.

At this point you can start working with your own Media ISO if you use MSDN or VLSC or thanks to a useful OSDBuilder command you can make use of Microsoft’s offering of the Enterprise versions of the “Windows 10 v1903 Feature Update” in ESD format.

For my requirements, ann that fact it’s slightly easier, I’m going with Microsoft’s offering using the OSDBuilder command.

Get-DownOSDBuilder -MediaESD Download

This will present a Gridview of all the offerings from Microsoft. Plenty of language choices for 1809 and 1903 for both Business and Consumer. Be aware it’s only 1903 that’s available in x86.

I suggest you filter using “Add Criteria” to get exactly what you want. For me it’s the en-GB x64 Business Edition version of v1903. Click the entry you require and click OK to begin the download.

OSDBuilder will download the ESD file using BITS into the “Media” subfolder and then unpack all the WIM indexes for you.

Now you need to import this media into the working folder so OSDBuilder can manipulate it as you require. Run the following command to present a gridview of the images within the WIM.


I’m going to pick Index 3 which is the Enterprise version. OSDBuilder will then import the media ready to be customised into the “OSMedia” folder.

The next step is to download and apply all the updates for your media. This is accomplished by running this command:

Update-OSMedia -Download -Execute

You’ll be offered a gridview showing the OSDBuilder media available to be patched. For us it’s only going to be our Enterprise image we imported in the previous step.

OSDBuilder will now download all the relevant updates for that media and then correctly apply them to all the WIM’s in the image. This will include the correct SSU and LCU. Depending on your hardware specs this could take a little while. Once complete you will notice in your OSMedia folder a newly patched version of your image.

So now having fully patched your media the next step is to create the build task definitions that will define how the output build looks. With OSDBuilder these are defined as Tasks and Templates. They are covered in more detail on the OSDBuilder site but basically the Task is the overall parent definition for the build and the Templates are the sub-components of the build.

So for my v1903 build I’m going to require an overall Task definition and a number of Templates to cover off all the customisation’s I require. So starting with the Task run this command

New-OSBuildTask -TaskName "Windows 10 v1903 x64"

This will prompt you for the media to use and will generate a JSON file in the Tasks subfolder which will be the overall control for the build.

Next up I want to enable NetFX3 in my deployments so I’ll be generating a Template to cover that off using a name that’s relevant to my requirements.

New-OSBuildTask -TaskName "Windows 10 v1903 x64 Enable NetFX3" -EnableNetFX3 -SaveAs Template

This will generate another JSON file in the Templates subfolder.

Next up I’m going to want to generate a Template that specifies the removal of the unwanted AppX packages.

New-OSBuildTask -TaskName "Windows 10 v1903 x64 Remove AppX" -RemoveAppx -SaveAs Template

This will offer you a GridView of the available AppX packages you can remove from the build. Pick what you need and complete the template.

Next up is to generate a Template for my additional Features

New-OSBuildTask -TaskName "Windows 10 v1903 x64 Enable Features" -EnableFeature -SaveAs Template

we only require the Telnet Client so that’s all I’ll be selecting.

Finally I want to apply a default Start Menu for all new users. This will be achieved with a final template. You will need to have already generated your XML file from a master build using the PowerShell command Export-StartLayout and saved the file in the Content\StartLayout folder in your OSDBuilder master folder.

New-OSBuildTask -TaskName "Windows 10 v1903 x64 Start Menu" -ContentStartLayout -SaveAs Template

Now you have all the build customisation files it’s time to produce the final build.

New-OSBuild -Execute

Pick your patched base media and watch the magic happen. Once the process has finished you will find under the OSBuilds folder your newly created output with all your customisations.

In my next post I will show how I use this new WIM in ConfigMgr for In Place upgrades.

Stay tuned!

3 thoughts on “Offline WIM Servicing

  1. Thank you for clearly putting everything together for us Andrew.
    We are currently deploying Win 10 1809 OS via SCCM in our Organization with a Custom WIM Developed by our Corporate Team. Is there any way that we could leverage David Segura’s OSD Builder to service our Custom 1809 WIM? That will include the correct Corresponding SSUs and LCUs?


    1. I don’t think that’s possible. The OSDBuilder framework is designed to utilise the raw base media you get directly from Microsoft. Might be worth reaching out to David on Twitter to confirm, but that’s my understanding.


  2. Excellent write-up. I currently use David’s module to service offline, but I’m using the English VLSC source media. Are you saying that I would switch to the ESD format and then have multiple serviced operating systems for the different languages? I currently image devices for 10 other languages with one OS/task sequence but the old method for “installing Language Pack Offline” step for MDT/SCCM task sequence is not working for 1903.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s