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 ).
- 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.
- Log the user of and login in as an administrator.
- Copy the data from %systemdrive%\users\<username>\appdata\local\TileDataLayer to a network share.
- 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 & 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 <> "All Users" And subfolder.Name <> "Default"_ 20. and subfolder.Name <> "LocalService" and subfolder.Name <> "Public") Then 21. 22. deleteFolder = Profile & "\" & subfolder.Name & localAppdata & layoutFolder 23. targetFolder = Profile & "\" & subfolder.Name & 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 """ & FolderName & """",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.