- Can’t uninstall app: Delete or change Windows apps that have been flagged as non-removable - Thu, Mar 16 2023
- FSLogix VHDX compaction: Resize virtual disks - Thu, Dec 1 2022
- Sysinternals Process Monitor: Real-time file system, registry, and process monitoring - Fri, Oct 28 2022
Windows 7 completed a first logon in less than 35 seconds, and the profile weighed in at less than 5 MB. Windows 8.1 exponentially increased both the first logon time and the size of the profile. Windows 10 continues this grand “tradition,” with a first logon time of well over two minutes and a profile weighing in at approximately 130 MB.
Why does profile creation take so much longer in Windows 10? Most of it can be attributed to Modern Apps, which are possibly the biggest paradigm change from operating system versions newer than Windows 7. Each of Microsoft’s new Modern Apps is assigned on a device-by-device basis, and when a user logs in for the first time, the Modern Apps assigned to it are created and loaded. Each Modern App also has a database sitting behind it, as you can see from the screenshot below showing the database file for Edge.
The creation of the Start Tiles, which is also controlled by a database, further increases logon time over and above that of Windows 7. The Windows 7 Start Menu was simply a window into a file system, but Windows 10 insists on not only compiling a database from installed applications and shortcuts, but also creating links to live Internet pages and inserting advertisements for various Windows Store apps.
All of this “magic” takes time. Normally, the time is spent looking at the mildly patronizing Windows 10 “first logon animation” (see below), but many choose to disable this and instead find themselves staring at a screen saying “preparing Windows.”
Once a user is logged in for the first time, if they’re using a local profile, subsequent logons to this machine will be an order of magnitude faster. This stands to reason—they now have a local profile cached on the device. However, if you’re in an environment where you have “open access” machines, which remove cached local profiles after a certain period of time, then users may be exposed to the “first logon” experience a lot more often than they’d like.
Additionally, if you use any sort of solution in which the copy of the profile is removed, this issue will keep on rearing its head. In this case, you may just want to improve the first logon time anyway, even if you’re not removing cached profile copies, so that your users don’t develop a negative perception of the new operating system you’re deploying.
So how can you decrease logon time?
Try not to log on straight after a cold boot
Windows 10 doesn’t specifically finish “booting up” when the logon screen is presented. In the background, there’s still a lot of stuff going on to do with the boot process. This is intentional—a smoke-and-mirrors approach to make Windows 10 look like it boots up much faster. However, the trade-off comes when you log straight on after a cold boot; the operating system is still running boot processes in the background. Logging on straight after a cold boot increases logon time by approximately 30 seconds in my lab.
Using a technology to start up machines prior to user arrival may help with this, but in many environments, this isn’t something that can be accurately predicted. It may also go against policies regarding power consumption.
Go Long-Term Servicing Branch (LTSB)
This is the option Microsoft would rather you didn’t take, but if you’re really concerned about the effects of Modern Apps, the LTSB option removes almost all of them (including bringing back the old Windows 7-style Calculator application).
However, there are things you need to be aware of, as the LTSB version (only available on Enterprise) is essentially a whole different operating system. The delivery of patches and feature updates will be significantly affected, so it is something about which you need to think carefully before taking the plunge.
Remove unneeded Modern Apps
PowerShell cmdlets exist to allow you to remove Modern Apps either individually or all at once. They are specified on a device-by-device basis, so you will need to run the cmdlets on each machine from an administrative PowerShell session.
If you wanted to remove all Modern Apps from a machine (except for those that are listed as part of the operating system), use this command:
Get-AppxProvisionedPackage -online | Remove-AppxProvisionedPackage -online
Bear in mind that this will also remove the Calculator app, so you may want to take a more piecemeal approach. To remove Modern Apps on an individual basis, use the Remove-AppxPackage cmdlet. Here are examples of removing some of the more esoteric apps:
Remove-AppXProvisionedPackage -Online -PackageName Microsoft.3DBuilder_10.10.38.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.BingNews_4.8.268.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.BingFinance_4.8.268.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.BingSports_4.8.268.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.BingWeather_4.8.277.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.MicrosoftOfficeHub_2015.6811.23771.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.MicrosoftSolitaireCollection_3.8.3092.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.Office.OneNote_2015.6769.17901.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.Office.Sway_2015.6769.45081.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.People_2016.219.2348.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.SkypeApp_18.104.22.168_neutral_~_kzf8qxf38zg5c Remove-AppXProvisionedPackage -Online -PackageName Microsoft.Windows.Photos_2016.325.13200.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.XboxApp_2016.322.258.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.ZuneMusic_2019.6.15131.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.ZuneVideo_2019.6.18671.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.WindowsAlarms_2015.1258.20.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName microsoft.windowscommunicationsapps_2015.6568.46361.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.CommsPhone_2.3.25005.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.Messaging_2.1.20000.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.WindowsPhone_2016.202.10.0_neutral_~_8wekyb3d8bbwe Remove-AppXProvisionedPackage -Online -PackageName Microsoft.Getstarted_22.214.171.124_neutral_~_8wekyb3d8bbwe
Import a standard Start Tiles layout
The creation of the Start Tiles database (vedatamodel.edb) also takes a while. What you can do is use the Export-StartLayout cmdlet to create a standard layout that you import into the default user profile. Set the Start Tiles the way you want them, and then use this command (substituting the path as appropriate):
Export-StartLayout -Path x:\xxx\LayoutModification.xml
Then simply copy the LayoutModification.xml file into C:\Users\Default\AppData\Local\Microsoft\Windows\Shell. When the user logs in, this file will be used to create the Start Tiles instead, reducing logon time.
Use a default user profile
By far, the most difference that you can make to the logon time of Windows 10 (in a domain-joined environment) is by creating a Default User profile in the netlogon share. When a user logs on for the first time in a domain situation, the netlogon share is checked for the existence of a folder called “Default User.vx” (where x is the version number corresponding to the operating system in use). For Windows 10 build 10586 and under, the folder should be called “Default User.v5.” Builds of 14279 and upwards expect a profile folder called “Default User.v6.”
You create the default user folder by logging on as a template user, logging out again, and then copying the contents of the %USERPROFILE% folder to a network share. Sanitize the Registry and the file system so that permissions are correct (make sure all users have at least Read permission to the files in the profile and inside the ntuser.dat file). Remove all references to the template user from the Registry ntuser.dat file, as well. You can also remove the APPDATA\LOCAL and APPDATA\LOCALLOW folders from the profile folders.
The process used is very similar to that involved in creating a mandatory profile, except that the ntuser.dat file is not renamed to ntuser.man. Creation of mandatory profiles is documented in many places online.
Using a default user profile in this way can reduce the first logon time on a Windows 10 device by a margin of approximately 66%. This makes a huge difference to the user experience, especially in environments where local profile copies are not maintained. A video demonstrating the difference between the logon times when using a default profile is available here.
Subscribe to 4sysops newsletter!
Used together or individually, the above tips should help administrators reduce the drag for their users when they are accessing Windows 10 for the first time.