Assume following scenario:
- You install Windows 10 using unmodified Microsoft Windows 10 image using either MDT or ConfigMgr
- You install .NET Framework 3.5 during State Restore phase
Note: Windows 10 comes with .NET framework 4.x pre-installed, but many applications developed a couple of years ago still require the .NET framework v3.5 installed along with 4.5. Windows 10 will prompt you to install .NET framework 3.5 when you try to run any such app.
The case opened when a customer contacted me because during Windows 10 OSD testing they encountered the Install Windows Features dialogue appearing right after the first auto logon prior to task sequence resuming after OOBE.
I verified the issue, checked Windows 10 task sequence, but could not find anything that would explain the problem: .NET Framework 3.5 was supposed to get installed via task sequence after the first auto logon. However, the "Windows Feature" pop up appeared before the task sequence could kick in. Next, I started looking for a common denominator: the issue reared its ugly head only on a HP EliteBook X2 1012 G1 convertible. Additionally, I remembered that a couple of days ago we updated all MDT driver packages using the MDT driver automation script I described in one of my earlier blog posts, which led to me to the conclusion that a recently added HP driver package was dependant on .NET Framework 3.5 causing the "Windows Feature" installation dialogue to show up.
My goal now was to determine a workaround which would allow the customer to use HP driver packages without any modifications. I had to somehow inject .NET Framework 3.5 into the OS before OOBE. The way that immediately jumped to mind as the easiest was to create a reference image - sadly, that was not option here, so I turned my attention to DISM. DISM (Deployment Image Servicing and Management) is a command-line tool that can be used to service and prepare Windows images, including those used for Windows PE, Windows Recovery Environment (Windows RE) and Windows Setup. You can use DISM to add .NET Framework 3.5 offline to an installation of Windows 10 as long as you provide access to the %DEPLOYROOT%\Operating Systems\%Windows10_1709_folder%\sources\SxS folder in the deployment share.
I wrote a small PowerShell script that would install .NET Framework 3.5 during the Post Install TS phase in Windows PE, added it to my MDT task sequence and - positive I'd solved my issue - ran the task sequence. To my immense satisfaction the pop up did not show up. Case closed! As for why the "Windows Feature" installation dialogue started showing after a driver package update, with everything else on my plate I haven’t had the time to investigate further.
How does it work:
Should you end up in the same boat, follow these steps to work around the problem:
- Add this script to your MDT deployment share:
# Determine where to do the logging $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment $logPath = $tsenv.Value("LogPath") $logFile = "$logPath\$($myInvocation.MyCommand).log" # Create Logfile Write-Output "Create Logfile" > $logFile Function Logit($TextBlock1){ $TimeDate = Get-Date $OutPut = "$ScriptName - $Section - $TextBlock1 - $TimeDate" Write-Output $OutPut >> $logFile } # Start Main Code Here $ScriptName = $MyInvocation.MyCommand # Get data $Section = "Initialization" $OSDisk = $tsenv.Value("OSDisk") $ScratchDir = $tsenv.Value("OSDisk") + "\Windows\temp" $NetFxSource = $tsenv.Value("SourcePath") + "\sources\sxs" $RunningFromFolder = $MyInvocation.MyCommand.Path | Split-Path -Parent . Logit "Running from $RunningFromFolder" . Logit "Property OSDisk is now $OSDisk" . Logit "Property ScratchDir is now $ScratchDir" . Logit "Property NetFxSource is now $NetFxSource" $Section = "Installation" . Logit "Adding .NET Framework 3.5...." dism.exe /Image:$OSDisk /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:$NetFxSource /ScratchDir:$ScratchDir
Make sure that WindowsSource variable is configured in your CustomSettings.ini. Example:
;NetFX 3.5 source path
WindowsSource=%DeployRoot%\Operating Systems\Windows 10 Enterprise 1709 x64\sources\sxs - Add the PowerShell script to your Windows 10 task sequence.
That's it!