Customizing Windows 11 default Start Menu during OSD using LayoutModification.json

In Windows 11 we can no longer deploy a custom Start Menu layout as we could in Windows 10. We don’t have any “Partial” managed option either as we had in Windows 10. The Group Policy “Start Layout” can still be used to deploy a custom Taskbar layout, HOWEVER the end user can no longer pin apps to the Start Menu if it’s deployed to the client, more on that topic here: Modify Windows 11 Taskbar during OSD, Intune and GPO – CCMEXEC.COM – Enterprise Mobility

What can we do if we are not using Intune then? There is an option for OEMs to pin applications to the Start Menu by using a “LayoutModification.json” file. The functionality is a bit limited, but we can use it to pin apps per default during OSD. More information can be found here: Customize the Windows 11 Start menu | Microsoft Docs

What can we do then? These are the rules of the LayoutModification.json.

If we look at the Start Menu this is what the apps we place in the different sections ends up. When we have tested this is what we have observed so far:

  • Edge is always pinned first
  • Word, Excel, PowerPoint are automatically pinned if installed
  • Outlook is NOT pinned per default
  • If we add one of these apps in our Layoutmodification.json they will not move but they will take up one of the items that we can pin in the file.
  • Teams cannot be pinned as it isn’t installed for all users and not installed when the user logs on.

Here is my sample LayoutModification.json that can be used for testing. It can also be downloaded from here: https://github.com/Ccmexec/MEMCM-OSD-Scripts/tree/master/Windows11

{
    "primaryOEMPins": [
        {
            "desktopAppLink": "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs\\7-Zip\\7-Zip File Manager.lnk"
        },
		{
            "desktopAppLink": "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs\\Microsoft Endpoint Manager\\Configuration Manager\\Software Center.lnk"
        },
		{
            "desktopAppLink": "%ALLUSERSPROFILE%\\Microsoft\\Windows\\Start Menu\\Programs\\Outlook.lnk"
        },
        {
            "packagedAppId": "Microsoft.WindowsTerminal_8wekyb3d8bbwe!App"
        }
    ],
    "secondaryOEMPins": [
		{
            "packagedAppId": "Microsoft.WindowsCamera_8wekyb3d8bbwe!App"
        },
		{
            "packagedAppId": "Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe!App"
        },
		{
            "packagedAppId": "Microsoft.SecHealthUI_8wekyb3d8bbwe!SecHealthUI"
        }		
    ],
    "firstRunOEMPins": [ 
        {
            "packagedAppId": "Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App"
        }
	]
}

The result will look like this, Start will be divided in two:

During OSD I run a PowerShell script that copies the LayoutModification.json to the correct location.

My source files:

The PowerShell script:

Copy-Item -Path $PSScriptRoot'\LayoutModification.json' -Destination $env:SystemDrive'\Users\Default\Appdata\Local\Microsoft\Windows\Shell'

It is not perfect, but we can at least pin some default apps. If we should do that is up to you!
Thanks to my amazing colleague Sassan Fanai who helped a lot with testing all this out.
I hope you find it useful!

6 Comments

Add a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.