Workaround for missing start menu tiles after a Windows 10 1709 upgrade

I have noticed recently that some users that have upgraded from 1607 to 1709 have lost their Start Menu tiles during the upgrade. I did a lot of research on the Start Menu topic and could only find one article from Microsoft stating that they were replacing the TileDataLayer feature with something called the TileStore. You can see the list of features that are removed or deprecated in Windows 10 Fall Creators Update here.

I’m suspecting that there is an issue migrating the tiles to this new feature and it is causing the start layout to become corrupt during the upgrade for some users. I even have a ticket open with Microsoft concerning this issue but unfortunately it does not look like it will be fixed anytime soon.

So here is my workaround and hopefully it can help someone else.

First you will need to make sure to export every user’s start layout. I am doing this with a scheduled task that will run the following Powershell script:

Export-StartLayout –path $env:LOCALAPPDATA\LayoutModification.xml

This will export the user’s existing start layout and it will copy it to their %LOCALAPPDATA% folder.

Once everyone’s start layout is exported, you can start the upgrade and run the following script at logon to bring back the user’s customized start layout:

If((Test-Path $env:LOCALAPPDATA\LayoutModification.xml) -eq $True) {
    Copy-Item $env:LOCALAPPDATA\LayoutModification.xml $env:LOCALAPPDATA\Microsoft\Windows\Shell\LayoutModification.xml -Force
    Remove-Item 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$start.tilegrid$windows.data.curatedtilecollection.root' -Force -Recurse
    Get-Process Explorer | Stop-Process
}

20 Comments

  1. How do you handle a computer with multiple users? Is there a way to export a person’s account that isn’t logged in?

    • Jose Espitia

      March 20, 2018 at 5:28 pm

      As far as I know there is no way to do this if the user is not logged in. Setting up a scheduled task weeks before your roll out should give you enough time to backup everyone’s start menu.

  2. Tony Perschall

    Jose,

    You are the man!!! I have spent countless hours fighting this using Microsoft’s recommended methods to no avail. This totally worked, and saved us lots of heartache! Thank you very much for figuring this out and for sharing it.

    Tony

  3. We are running into this exact same issue and I was on the verge of opening a case with MS. Did you ever hear anything back about it? PS great workaround I will have to give it a try!

    • Jose Espitia

      March 20, 2018 at 5:24 pm

      They asked me to try the latest 1709 ISO from VLSC but I just haven’t had time to test it since this workaround works 100% of the time. Please keep me updated if you hear of any updates!

      • Thanks! We are using the latest media. I actually tried the old original media thinking it was an issue with that. How were you kicking off the import? I am running the export as scheduled task, but creating a scheduled task for logon will re-import every time and revert any changes. Not sure on the best way to only run that once per user. Thanks for posting about this!

        • Jose Espitia

          March 20, 2018 at 8:16 pm

          I have been using the RUNONCE key to launch the script. This would ensure that it only runs once per user.

          • I was thinking of this as a solution, but I had 2 things I was unsure of. If I set the HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce registry doesn’t it only set for the user that is currently logged in during the TS or when the app runs? If the machine is shared I would need it to run for each every user. If I modify the default user hive this would only run for new users, wouldn’t it? Sorry to be a pain, just trying to come up with a last minute solution before our Prod roll out start next week :)

          • Jose Espitia

            March 21, 2018 at 6:19 pm

            HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce will only run for the current logged in user but you can write up a script that will scan through C:\Users and load every profile’s NTUser.dat so you can modify every user’s HKCU hive. You can also try adding the script to HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce. Let me know if you need any help and feel free to contact me via my contact page :)

  4. I just created an Active setup for the import!!

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Active Setup\Installed Components\RestoreStartmenu]
    “StubPath”=”powershell.exe \”c:\\Windows\\RestoreStartMenu.ps1\””

  5. Dear,
    I am getting access denied error while running import PS command in SCCM upgrade task sequence using run powershell script step.

    any thought?

    thanks,

  6. Hi all,
    I have two questions:

    1) I noticed that in this script we aren’t even using the Import-StartLayout cmdlet at all anymore. Can someone explain why we don’t need to use this anymore?

    2) If i manually run this command when logged in using my admin account it works perfectly. However, when run under a regular user account the custom pinned items do not show back up (the XML file i exported prior to the upgrade was from the standard user account). I temporarily made the standard user an admin but it still doesn’t work, so it doesn’t appear to be a permissions issue. Any suggestions?

    THanks!

    • Jose Espitia

      June 11, 2018 at 3:37 pm

      Eric,

      1. I’m not using Import-StartLayout because this PS cmdlet will only modify the default profile (It basically just copies your start layout to C:\Users\Default\AppData\Local\Microsoft\Windows\Shell). In order for this fix to work, we need to copy the user’s backed up start layout to %LOCALAPPDATA%\Microsoft\Windows\Shell\LayoutModification.xml. This will overwrite your default start layout that gets copied over when a profile gets created and overwrite it with the backup.

      2. Did you backup the user’s start layout before the upgrade? Please check %LOCALAPPDATA%\LayoutModification.xml to see if the user’s custom pins are in the contents of the XML file.

  7. I wanted to apply a custom start menu to existing users after a Windows 10 upgrade. The users would be upgrading to 1803, but I did not see HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$start.tilegrid$windows.data.curatedtilecollection.root present in the 1803 registry while it is on my 1709 system. Is there anyway to do this? On my 1709 system I tried copying over the relevant Start Layout files to the profile I wanted to change but no joy.

    This raises another question. I have used the Powershell comand to import a start menu layout for new systems, and I noticed a “mount path”, which I always set to C:\ – What exactly is that doing??

    • Jose Espitia

      June 11, 2018 at 3:27 pm

      Have you launched your start menu? I have noticed that the key does not get created until you launch the start menu for the first time. Also have you tried deleting HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\CloudStore?

      As for your second question, Import-StartLayout basically just copies your XML file to C:\Users\Default\AppData\Local\Microsoft\Windows\Shell.

  8. Ronald Montgomery

    Thanks for this information. Big help.
    To avoid adding a file to a package, I wrote a task sequence step to generate a command file on the machine. Sorry if it gets garbled in the posting.
    I call this with a RunOnce key after the upgrade. Tested it in a few machines. So far, so good. Please excuse any bad PowerShell practices.

    cmd /c powershell.exe -Command “$text = \”powershell.exe \” + \””If(Test-Path `$env:LOCALAPPDATA\LayoutModification.xml){ Move-Item `$env:LOCALAPPDATA\LayoutModification.xml `$env:LOCALAPPDATA\Microsoft\Windows\Shell\LayoutModification.xml -Force; Remove-Item ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\`$start.tilegrid`$windows.data.curatedtilecollection.root’ -Force -Recurse; Stop-Process -Force -Name ‘Explorer’ }\””; $text | Set-Content \”%ProgramFiles%\scripts\StartMenuRestore.cmd\””

    • Jose Espitia

      June 11, 2018 at 3:23 pm

      Good to know Ronald Montgomery! It’s always great to hear back from others on how they implemented the fix :)

Leave a Reply