Introduction
Three little words can change your life forever. Whoever said that originally clearly had a time machine because they’d experienced Windows 10 Upgrades. Microsoft have completely changed the game with Windows 10, providing regular releases that we all need to stay on top of.
This for a home user is simple! A quick scan to Windows Updates, and we get a whole chunk of information and pretty imagery inviting us in.
But, what about for the Enterprise?
Well, the ConfigMgr\SCCM team have done a superb job of giving us the ability to upgrade machines on mass, fully in our control with both Servicing Plans, and my preferred choice, Upgrade Task Sequences, and these work great!
But, for the end-user, they are left a little in the dark. They either get a windows update that takes an hour to install, numerous restarts and everything has suddenly changed. Or they get a task sequence dialog pop-up which to the uninitiated, can be a little daunting and uninformative.
What if instead, we empowered the user?
Make it Shiny
The idea
- Make a GUI informative for users, to run whenever they please.
- Pack it with information and customisation options.
- Ability to run pre-upgrade Hardware Checks.
- Ability to attempt remediation steps should Hardware checks fail.
- Run outside and individual to the Task Sequence.
- Increase upgrade success rate.
The Process
User Runs GUI > GUI Run Checks > GUI Restarts Machine > Task Sequence Is Run
What can it do?
Hardware Checks
The GUI now has four main checks built-in;
- Hard Disk Space Check (default 20gb)
- RAM Check (default 2gb)
- Power Check (Battery etc)
- Network Check – Ethernet\Wifi (Optional)
- Supported Hardware Model Check (Optional)
These checks automatically run, giving the user dialog and information the whole way through. Should the Hard Disk Space Check fail, then it will move onto remediation. If the RAM check fails, then it informs the user why and they are left to exit.
These checks are completely pre-tasksequence. Halting and hopefully averting unnecessary failures before it even gets there.

Disk Space Check Failed

RAM Check Failed
Remediation
When the GUI comes here because it’s detected the hard disk is too full, it attempts to remediate the problem by clearing & running;
- C:\users\*\AppData\Local\Temp\*
- C:\Windows\Temp\*
- Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
For the majority of machines, this will free up a good chunk of space, gb’s at least, and hopefully enough to allow the machine to pass the checks and continue with the upgrade. If not, they are redirected to a screen to inform them, and to exit the upgrade GUI.
Final-Script \ Reboot
The last stage of the GUI does a few things..
- Sets a ‘Windows 10 is Upgrading’ lock screen wallpaper (optional)
- Configures legal text to inform anyone who attempts to logon (optional)
- Blocks logins for any current users of the machine (optional)
- Configures the Upgrade to take place at next startup (scheduled task)
- Restarts the machine after a configurable timed countdown
This is all about 2 things, user experience, and success rate. Up till this point, we’ve given the user full control over their upgrade with this GUI, they’ve chosen to run it and have been informed of whats it’s going to do and how long its going to take. Now, we’re going to restart the machine to make sure we’re at a fresh boot with no one logged on, no dodgy programs running, completing any pending windows updates, and, we’re going to keep it that way while we run our upgrade.
And as per community request, if for whatever reason the Task Sequence fails to launch, then you can specify a wallpaper to match;
Customisation’s
You can, of course, change the majority of settings and content in this GUI via the main Settings.config file.
Title Bar, Company name & URL, Banner, Title, Main content, Learn More Button URL, Icon are all configurable.
Settings.Config
Update! – v1.2.0 – Major work has been done to this section!
A single Settings.Config file exists. This is where you can make your changes.
This is located in the main root which holds all customisation as per above example, and as seen below;

True/False – Visible/Hidden – Quotes not required on any except Legal
In this same file, you also need to specify the Exact Name of your Upgrade Task Sequence.
This Task Sequence needs to be deployed to the machines or users (available or required).
Configuring
SCCM Applications
Two applications are provided for you to import;
1. Windows 10 Upgrade GUI
This is the application you need to deploy to users\computers as Available. This runs the GUI. It has no content so does not need distributing. It purely runs the GUI from the local machine. Its detection is based on a file which will get installed during the Task Sequence (included in the sample).
2. Windows 10 Upgrade GUI Source Files
This app installs the source files for the GUI onto the target machine, and is a requirement for app 1. This needs to be distributed, but not individually deployed*.
Task Sequence Steps
We need to run some cleanup actions in the Task Sequence Post Upgrade. I’ve included a sample Task Sequence which includes these steps. You will need to add these into your Upgrade Task Sequence.
Final Touches
Desktop Shortcut
Lets really make this easy, and obvious to our users shall we?
Copy the shortcut link from Software Center for the deployed Windows 10 Upgrade GUI, or, as its seen in the catalogue, “Upgrade Windows 10”.
Take this url over to your group policy, and create a desktop shortcut..
*You’ll have noticed above I’ve based this targeting on the main executable. For this to preexist, you must predeploy the SourceFiles application to the machines.
And there we are.. much better;
Disable Logins
You have the option to specify in the Settings.Config file;
BlockUserLogon=True
If this is True, then the GUI will add all current users of the machine, to a new local group called “Windows10UpgradeDisableLogon”.
Add this group (no domain prefix), to a logical group policy under ‘Deny Log On Locally”.
The outcome of this is as you’d expect, after the machine restarts, any current users of that machine will be unable to log in.
Why?
Back to the whole idea of this.. Improve User Experience and Increase Success Rate.
Is it a good idea to have the upgrade task sequence running whilst the user is logged in doing xyz working around it, moving the progress bar out the way (assuming its open) and then Bang! A completely unexpected reboot.
We can do better can’t we? Set this. Make everything better.
You can specify an account with wildcard to not add them to the blocked group. For instance if all your IT accounts are “EverythingSCCMITLogin1” “EverythingSCCMITLogin2” etc, (bit weird if they do), then you could specify;
ExcludeUser=EverythingSCCMITLogin*
This way, should IT need to login to the computer, they certainly can do.
Other Features
- (BETA) Bitlocker – Disable Protections for x amount of reboots.
- Configurable via Settings.Config. BETA means BETA. Let me know how you get on.
- TopMost – Community Request, tick.
Requirements
- This has been solely tested on Windows 10 1511 and above.
- This has 100% been designed for Windows 10 > Windows 10 upgrades.
- Application must run from C:\Windows\EverythingSCCM\Win10UpgradeGUI
Download
Changelog
v1.3.0 | 22/05/2018 | Brand spanking new Exe’s – Now with 0 False Flags. Bug Fixes
v1.2.1 | 19/03/2018 | Network Check (Ethernet and/or Wifi), Dual Battery Support, Bug Fixes.
v1.2.0 | 12/03/2018 | Huge Update. More Hardware Checks, Power\Battery, Supported Hardware Check, TopMost, Bitlocker, Condensed into single Settings.Config, Complete Rewrite of RunTaskSequence.exe, More shininess, Faster, Loads of Bugs squashed and loads of logging.
v1.0.5 | 13/12/2017 | Bug fixed with LegalText still applying despite config set to False
v1.0.4 | 11/12/2017 | TS Sample Updated, wrong path in step.
v1.0.3 | 10/12/2017 | Bug fixed with final Upgrade button duplicate clicks.
v1.0.2 | 08/12/2017 | Removed dev variables from Settings.Config
v1.0.1 | 08/12/2017 | Base
Thanks
I could not have made this GUI if it wasn’t for Stephen (FoxDeploy) Owen’s superb series on exactly that. If you’ve not seen his page, or even if you just want to learn how to make these things, go have a read; https://foxdeploy.com
100% of the shininess comes from the b-e-a-utiful Mahapps.Metro theme!
Cleanup scripts borrowed directly from Garytowns great post.
And, as ever, the many members of the WinAdminsSlack forum, who even if they didn’t directly realise, have helped with this! :D.
Especially Colin Wilkins for helping me at numerous stumbling points!
(If you would like an invite to this forum, please do let me know).
Feedback \ Bugs \ Future Features
There will undoubtedly be all three.
Should you have any feedback, good or bad, happen to find any bugs (I have no doubt there will be some), or can even just think of some great features to pack into future versions, let me know!
Rich Mawdsley
Hi Rich
Thanks for a good product, 🙂
How will I do to change the time to restarting to direct or decrease the time, less than 20 minutes
Thanks for answer
Jonas
LikeLike
Thanks Jonas!
In the Settings.Config file, under the Other section.. “RestartCountdownMin”
Rich
LikeLike
Hi Ricks, thanks for your answer.
I don’t understand what is the purpose to create a desktop shortcut, it’s for deploy for each user?
I do not think it is something for the individual user to do this…
Regard Jonas
LikeLike
That’s exactly the point in this tool. Give your users the freedom to run the upgrade at a time that suits them.
LikeLike
Hi Rich,
I am loving this GUI interface and so far I have had great success! One thing I am running into is that after the TS runs and cleans up the files, my lock screen is solid blue and I can’t find a way to change it back. Can you explain how you change the lock screen with the GUI so that I can reverse this at the end of the TS to set it back to what the user had?
Thanks!
Justin
LikeLike
Glad to hear Justin!
The command it runs is simply; cmd.exe /c REG ADD “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization” /V LockScreenImage /T REG_SZ /D $LockScreenWallpaper /f
However, there are currently issues with 1803: https://social.technet.microsoft.com/Forums/windows/en-US/1664b0ab-f1d8-4e60-8337-13f079a33752/windows-10-1803-custom-loginlock-screen-image-is-not-applied-until-a-user-logs-in?forum=win10itprosetup#5892fb83-116e-48ca-a1d4-d61403a5f3d1
So that could be the issue?
As a side note – v1.3.2 went live today with a few improvements 🙂
Rich
LikeLike
Thanks for the prompt reply! Unfortunately we are using 1709 but I will do some more testing now that I have the exact command that runs.
As far as 1.3.2, I am super excited and went to go download it but it is still giving me 1.3.1 when I hit download.
LikeLike
How strange! Fixed now!
I’m thinking regarding the wallpaper, perhaps that key needs deleting.. Shall test and add it to the sample TS if needed. But let me know how you get on.
Rich
LikeLike
I am thinking the same thing. I am thinking there is a bug if you don’t remove this key and then the user tries to change it themselves. When I tried changing it as a user afterwards it didn’t actually change it. Then I tried deleting the key on that same machine and it still did not change it. When I took a different machine where I had never tried to change it as the user, it worked properly. I am adding the removal to my testing task sequence and will let you know how that goes.
LikeLike
Adding cmd.exe /c REG DELETE “HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization” /v LockScreenImage /f to the task sequence fixed the blue background issue for us.
LikeLike
Great. Glad to hear you got the sorted, thanks for letting me know. I’ll update the blog shortly.
LikeLike
Hi Rich,
Love the script, its going to make rolling out upgrades to our users much easier.
Have just installed v1.3.2 and seem to have found a bug, when a user hits the restart button a second time to immediately restart the machine, the scheduled task never gets created so the machine reboots and does nothing. Letting the timer run out works as expected with the scheduled task being created at 60 seconds to go.
Cheers,
Justin.
LikeLike
Hi Justin,
Thanks for the info, that’s odd it seemed to be working OK, but I did have difficulty with this previously.. Will take a look asap.
Rich
LikeLike
Bug resolved in v1.3.3. Thanks for reporting Justin.
LikeLike
Hi Rich … thanks for a good application ..
My question is, how I will do that below.. ?
#*You’ll have noticed above I’ve based this targeting on the main executable. For this to preexist, you must predeploy the SourceFiles application to the machines.#
Regard Jonas
LikeLike
Simply deploy the SourceFiles application as required to targeted machines.
LikeLike
Hi Rich thanks, .. again 🙂
about the folder Windows 10 Upgrade GUI_files,
I wonder why the folder is exit, “Content_afa4af13-aa2b-4a9f-a9f5-2f4c56aa185f”
I got error with that path,
\\SCCMServer\Everything SCCM\Windows 10 Upgrade GUI_files\Content_afa4af13-aa2b-4a9f-a9f5-2f4c56aa185f\Windows10UpgradeGUI
then I have changed the path to
\\SCCMServer\EverythingSCCM\Windows 10 Upgrade GUI_files\Windows10UpgradeGUI
It’s a bug or something ?
Regard Jonas
LikeLike
EXIT = EXIST, 🙂
LikeLike
On import? Might be that the file path is too long?
LikeLike
Hi Rich
Yes from Import,
If you want, it would have been good if you deleted for the next update, as I do not need change the path every time there is an update,
Regard Jonas
LikeLike
Hi Rich,
I like this product. I have tested your product in various scenario,
How does working the Network control and the Network Control ?
Regard Jonas
LikeLike
Solved, That’s working perfect !
LikeLike
We would like to translate your probram to french (working for a french schoolboard).
How can we translate your program?
Thanks
LikeLike
Rich, I am unable to distribute the sources files to distribution points. I get an error that it cannot find the content. “Content_afa4af13-aa2b-4a9f-a9f5-2f4c56aa185f\Windows10UpgradeGUI\Win10UpgradeRunTS\RunTaskSequence.exe”
This is what I have “Content_afa4af13-aa2b-4a9f-a9f5-2f4c56aa185f\Windows10UpgradeGUI\RunTaskSequence.exe”
Apparently I am missing the “Win10UpgradeRunTS” folder
Thanks!
LikeLike
Hi Sean,
Good chance it’s the path length from when you copied the download to your source directory, it likely dropped a bunch of files. It’s quite long as it is and doesn’t take it much to push over the 255 limitation.
Rich
LikeLike
Even when I unzip the “Windows 10 Upgrade GUI v1.3.3.zip” to the root of the drive, it does not have the “Win10UpgradeRunTS” folder inside.
LikeLike
Hi Sean,
Apologies I missed the folder in your first comment. The exe inside has now moved to the root and the folder no longer exists. I’m assuming the sccm app must have some older knowledge of it although I don’t get it on testing. I’ll update the app export in the next release.
For the moment if you can’t get around it, manually recreate the app in sccm copying all the settings.
Rich
LikeLike
Hi Rich,
Thanks for a good product. It’s seems to be working properly now.
Do you have any solution when I need to repairing the installed application?
Scripts or something
Regard Jonas
LikeLike
Hi Rich ,
Please help me
I have got the disable logins function working but when another user can she login,
How will I do to prevent that ?
Regard Jonas
LikeLike
That’s correct. The group it adds only skims the users that have already logged onto the machine. The only way to stop everyone would be to drop Domain Users into the group.. Which in my opinion would be a tad overkill and potentially cause more issues then it solves.
Ultimately I would hope not too many people would ignore the lock screen wallpaper and legal text. If they do then it’s really their own fault when the machine randomly reboots!
LikeLike
Hi Rich
Do you know how disable the check box in the start screen ?
// Jonas
LikeLike
Find it, ShowCloseButton=”False” in MyXaml file
LikeLike
I can’t get the GUI to initialise on any of our Windows 10 Builds. Are there some other base requirements that I’m missing? All our builds are secured to CIS benchmark standards. As I hope everybody’s are!
LikeLike
None other then as specified in the blog. What does the log say?
Rich
LikeLike
Hi rich, what log?
LikeLike
Logs folder is created on first run.. This is subject to it having permissions. See other comment but follow the blog to configure it to run via SCCM. Although it can work running it directly as admin, it’s not how it’s designed to.
LikeLike
To clarify what happens, if I double click the Windows10UpgradeGUI.exe from the C:\Windows\EverythingSCCM folder all existing windows are minimised, and then nothing happens. Any ideas?
LikeLike
Just to confirm: C:\windows\everythingsccm\Win10upgradegui is the folder you’re running from?.. Sounds like it can’t read the Myxaml.xaml file which should be in the same root dir. Could be permissions.. It’s designed to be run via SCCM/Software Center (as System).
LikeLike