Skip to main content
SysAdmin

Update / change start menu layout Windows 10 pro for existing users

By April 8, 2023No Comments

There are plenty of articles about changing the Windows 10 start menu for all users, all have in common that they only seem to work for new users logging in. I needed a way to change it for users that already have a profile and I don’t have Windows 10 Enterprise.

The Win 10 start menu is stored in a database file, so you can’t really manipulate the menu layout. But there is a way to replace it, only keep in mind that you will replace the whole start menu including the recently opened items. Another pre-request is that the users should be logged off and you will need to have administrator permissions (but that should not be an issue ).

  1. Create the Start Menu layout, make sure you don’t use any App in the layout. Apps need to be installed under the user account, so they won’t work. Only normal applications like Adobe Reader and system application like Calculator will work.
  2. Log the user of and login in as an administrator.
  3. Copy the data from %systemdrive%\users\<username>\appdata\local\TileDataLayer to a network share.
  4. Run the following script on the client machine:
1.  Dim FSfolder
2.  Dim subfolder
3.  Dim i
4.
5.  startFolder = "c:\users"
6.  localAppdata = "\Appdata\Local\"
7.  layoutFolder= "TileDataLayer"
8.
9.  'Network share where the new layout is stored
10. newLayoutFolder = "\\filesrv\netlogon\_INSTALL\Win10\TileDataLayer"
11.
12. set objShell = CreateObject("Wscript.shell")
13. Set objFSO = CreateObject("Scripting.FileSystemObject")
14. Profile = strSysDrive &amp; startFolder
15. Set FSfolder = objFSO.GetFolder(Profile) 'getting the user profile folders
16.
17. For Each subfolder In FSfolder.SubFolders
18.
19. If (subfolder.Name &lt;&gt; "All Users" And subfolder.Name &lt;&gt; "Default"_
20. and subfolder.Name &lt;&gt; "LocalService" and subfolder.Name &lt;&gt; "Public") Then
21.
22. deleteFolder = Profile &amp; "\" &amp; subfolder.Name &amp; localAppdata &amp; layoutFolder
23. targetFolder = Profile &amp; "\" &amp; subfolder.Name &amp; localAppdata
24.
25. DeleteThisFolder(deleteFolder)
26. CopyNewLayout(targetFolder)
27.
28. end if
29.
30. Next
31.
32. '*******************************************************************************************************
33.
34. Function DeleteThisFolder(FolderName)
35.
36. If objFSO.FolderExists(FolderName) Then
37. objShell.Run "CMD.EXE /C RD /S /Q """ &amp; FolderName &amp; """",0,True
38. End If
39.
40. End Function
41.
42. '*******************************************************************************************************
43.
44. Function CopyNewLayout(FolderName)
45.
46. If objFSO.FolderExists(FolderName) Then
47. objFSO.CopyFolder newLayoutFolder, FolderName, True
48. End If
49.
50. End Function

The script will go through all user’s folders looking for the folder “TileDataLayer”. If found it will remove it and copy the new layout to it.