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 https://twitter.com/SeguraOSD.
Full details of his PowerShell framework are documented here https://www.osdeploy.com/osdbuilder/home 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 https://www.osdeploy.com/osdbuilder/docs/basics/installation.
David releases regular updates to the code so follow him on Twitter https://twitter.com/SeguraOSD 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 https://spaghettidba.com/2017/12/19/recovering-the-psgallery-repository-behind-a-corporate-proxy/ 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.
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.