Recently I came across an issue that had me losing my hair. During a recent project, I built a corporate Windows 10 image for a customer to be deployed with Configuration Manager. The corporate image had several customization steps to accomplish various tasks such as changing the start menu layout, removing consumer apps and customizing the taskbar. The goal was to have the in-place upgrade task sequence produce a result that closely resembled the deployment for New Computers. Enterprise Client Management MVP Jörgen Nilsson, provided a great blog post on Customizing the Taskbar in Windows 10 during OSD including a set of scripts which works great for New Computer Deployments, but what about in-place upgrades? Jörgen’s great solution involved setting a RunOnce registry entry for the default user that would kick off a PowerShell script for each new user logging in. In an in-place upgrade scenario though, chances are the primary user of the PC would not be a new user, and naturally, their taskbar would still be default. How can we solve this? Active Setup of course!
For those who don’t know, Active Setup is a great way to make changes to user profiles that modify registry settings in HKEY_CURRENT_USER (HKCU). Windows looks at the Active Setup area of the machine profile (HKLM) and checks if it matches the user profile (HKCU), any necessary jobs are run and the HKCU is modified to match the HKLM Active Setup entry. In the case of my taskbar changes, I simply modified Jörgen’s script to place the running of the PowerShell script into Active Setup instead of the user’s RunOnce key. Excited to test and see success, I ran my task sequence and logged into my newly upgraded machine.
But what’s this? The Windows shell (explorer.exe) will not start! I can see my cursor, I can even CTRL+ALT+DELETE and run Task Manager, but no matter what I do, including running a new task, I could not for the life of me get explorer.exe to run.
After some extensive troubleshooting I finally discovered the problem! The PowerShell script I was using made the changes it needed to the registry and then stopped Explorer.exe so that it would start again on its own and display the customized taskbar.
While RunOnce runs when the user logs into Windows and this works fine, Active Setup actually runs before the Windows Shell starts. The PowerShell cmdlet to stop explorer could never complete because the process was not yet running. Easy fix, simply remove the portion of the script that stops explorer.
Active Setup will run the PowerShell script, make changes to the registry and then complete, after which, explorer.exe will start with our shiny new taskbar.
This was a pretty simple issue to fix, though it took me some time to actually identify the issue, so I hope this helps someone else who uses Active Setup and finds their Windows shell won’t start.