Windows 10 – Bare Metal Deployment (Part 2 – Adding .NET 3.5)
Okay, it’s been a busy few days but I finally needed to get back to this topic.
In part 1 I talked about the custom actions needed to deploy a Windows 10 image using SCCM 2012. I’m re-inventing my OS deployment process and eliminating the use of a custom-built base image and instead will be using the factory WIM file and performing all customizations at build-time. We had trimmed down the custom actions used to generate the base image over time, so I felt it was a good time to cut the custom base image loose and streamline the process.
In this part I’ll go over the changes I needed to make to get the .NET 3.5 feature added. Windows 10 included .NET 4.5 but we have some applications that specifically require .NET 3.x.
I could not use the native “Install Roles and Features” step in the SCCM task sequence. Since my task sequence is applying the factory WIM as an image and not running it through setup, I cannot reference the SXS files in the OS source. Windows 10 is imported as an Operating System Image and not an Operating System Installer so there are no supporting files.
To get .NET 3.5 installed will take a little creativity.
I want to thank Niall Brady for the info on this process.
[If you’re looking for some serious information on how to do SCCM, his site is the place.]
We have 2 “Run Command Line” actions required to get this done.
- Make the needed SXS files available
- Use DISM to add the .NET feature
Make the needed SXS files available
First off we need to have access to the SXS files so that the system can retrieve the necessary files for the feature. To do this we will create a package (in my case a pair of packages 1 for 32bit and 1 for 64bit) that contain the SXS files.
Start by creating a source folder for the files. Use the process you already may have. Since there will be nothing special about these packages they can be created just like any other run of the mill package.
I created a pair of folders one for 32bit and one for 64 bit:
Next, from the Windows 10 ISO copy the SXS ([ISOroot]:\Sources\SXS) folder to the matching package folder. With build 9879 there are only 2 CAB files so it don’t be surprised.
Now create a simple package in SCCM, no program is needed.
Task Sequence Changes
Before we can use DISM to add the feature we need to get the SXS files from the packages we just created to the system. I do this with a group of actions performed once the system has booted into Windows 10 for the first time in the State Restore group of actions.
We’re going to use a simple copy command line and copy the SXS files to a fixed location on the system being built. In my example the 2 copy commands key off of the OS archetecture (x86 vs. x64).
The call line is the same in both actions:
xcopy “.*.*” “C:\Windows\Temp\” /D /E /C /I /Q /H /R /Y /S
This takes the contents of the pacakge (the SXS folder and all of its contents) and copies them to C:\Windows\Temp. You can use any folder to copy the SXS files into so alter the call line to fit what you would prefer to use.
Use DISM to add the .NET feature
The second step in this process will be to use DISM to add the feature. Since we are booted into the full OS we don’t need to worry about 32bit vs 64bit. The call line will use the native version of DISM.
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:”C:\Windows\Temp\sxs”
The command breaks down like this:
|/Online||Specifies that the action is to be taken on the operating system that is currently running.|
|/Enable-Feature||Enables or updates the specified feature in the image.|
|/FeatureName:NetFx3||Specifies the name of the feature to enable (NetFx3 = .NET v 3.5)|
|/All||Enable all of the parent features of the specified feature.|
|/LimitAccess||Prevents DISM from contacting Windows Update to retrieve additional files.|
|/Source:”C:\Windows\Temp\sxs”||Specifies the location of the files required to add the feature|
Now during deployment the proper SXS files will be copied to the local system and referenced by DISM to enable .NET v 3.5