Windows 10 – Bare Metal Deployment (Part 1)
To keep my sanity I put the in-place upgrade work I was doing aside for the time being and instead focus on the “traditional” wipe and reload sequence.
I also decided to try a different approach and do away with using a custom generated base image captured using MDT. Over time we’ve pulled more and more out of our base images. As I was preparing a build and capture sequence in MDT I realized that there were only about 20 customization actions that I was making for my image. Most of those turned out to be installing some enterprise-wide applications that we were in fact upgrading during deployment. Other settings were things like creating shortcuts, or Registry keys… Hello! Group Policy Preferences!!!
So, I decided why setup and use one MDT task sequence to capture a lightly customized image that I then import into SCCM and then setup another task sequence to deploy it? I’ll just use the factory image direct from Microsoft. When it comes time to patch I’ll use the Offline Servicing feature of SCCM.
I may be asking for trouble with this but….
“Failure is the opportunity to begin again more intelligently.”
– Henry Ford
I started with a basic MDT task sequence. I might as well start simple and make sure the fundamentals work before I go all in. (Our build task sequence is pretty complicated.) A few things I had to do special to make it work…..
- I needed to replace the DISM tool so that I’ll be able to inject drivers (thanks go to Johan for that one)
- I needed to add the .NET 3.5 feature (tip my hat to Niall)
- I had to fix a lot of logic within the sequence to remove reliance upon OS versions
I deviated from Johan’s instructions slightly. He added the updated Windows 10 DISM to the MDT Files package. I don’t want to dink with our production MDT package and I don’t want to muddy things up with a second “Windows 10” MDT package either. I also felt that I’ll have to replace DISM again later on at least when Windows 10 goes RTM if not sooner with upcoming preview releases. With that in mind I decided to create a dedicated package for the Windows 10 DISM.
First, you need to get the updated DISM files….
- Start by mounting the boot.wim from either the 32bit or 64bit (depending on what architecture your environment uses, I hedged my bets and did both)
- You will find DISM in the Windows\System32 folder
- I’m using a dedicated pacakge, so I created the package source folder and inside I created subfolders for x86 and x64:
- Next, copy the DISM folder and the DISM.exe from the mounted Windows 10 boot image to the corresponding folder in the package source
- Repeat with the 64bit boot image
- Now create a basic package in SCCM using the root folder as its source (in my case Win10-DISM_9879) and push it out to your distribution points
Task Sequence Modifications…
Now that I had the updated DISM binaries in a package, the next thing I had to do was to get them into WinPE so that they would be available. I wasn’t going to inject these into my boot image, so instead I used a couple of actions in the WinPE portion of my task sequence to copy the files to the RAM drive. To keep it simple I added them imimmediatelyrior to applying the Windows 10 image.
- In the task sequence I created a group and a pair of “Run Command Line” actions for this.
- * * * Copy WTP dism.exe
- * * * Copy WTP DISM subsystem
Now after applying the image DISM will be able to inject drivers and perform other offline servicing correctly.
Next up, getting the .NET 3.5 feature added….