Windows 11

Customize the Windows 11 Start menu

In the original Windows 11 preview builds, the documentation published at the time only covered the OEM process for customizing the Start menu. The type of customization OEMs can do is fairly limited, just adding a few items.

Now that Windows 11 has been released, new documentation has been published showing how organizations can make more extensive customizations. With this setup, you can completely replace the default Start menu layout with one of your own. The doc walks through the process:

  • Customize the layout on a running OS.
  • Use the “Export-StartLayout -Path C:\Layout.json” command.
  • Deploy a “ConfigureStartPins” policy with the contents of that JSON file using an MDM custom OMA-URI policy.
  • Log in as a new user to see the new layout.

The JSON file I created to do this was super simple, with just one item pinned: Edge. It looks like this:

{ "pinnedList": [ { "desktopAppId": "MSEdge" } ] }

(Yes, that could be formatted on multiple lines, but it looks nice and simple on a single line.). Next, I created the MDM policy:

MDM URI: ./Vendor/MSFT/Policy/Config/Start/ConfigureStartPins
String value: { “pinnedList”: [ { “desktopAppId”: “MSEdge” } ] }

And sure enough, after that policy is applied and before the user logs in (e.g. during Autopilot device ESP), I can see new user logins pick up that layout:

So that works reasonably well. There are some limitations, e.g. no partial layouts, no groups, no locked layout, etc., but it’s at least easy to do. But there is a problem: There’s no GPO (that I can find at least) to do the same thing. Nor is there a WMI bridge property to allow you to set the MDM policy through a supported channel. So this is truly an MDM-only setting.

That doesn’t mean it’s impossible to do though — it just means you have to use an unsupported way of doing it. In this case, the MDM policy is stored in the registry when it is delivered, so we just need to extract it from the registry and deploy it back into the registry on a different machine. Searching the registry for the JSON gets me the location, which I then exported into a file:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\current]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\current\device]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\current\device\Start]
"ConfigureStartPins"="{ \"pinnedList\": [ { \"desktopAppId\": \"MSEdge\" } ] }"
"ConfigureStartPins_ProviderSet"=dword:00000001
"ConfigureStartPins_WinningProvider"="B5292708-1619-419B-9923-E5D9F3925E71"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\providers]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start]
"ConfigureStartPins"="{ \"pinnedList\": [ { \"desktopAppId\": \"MSEdge\" } ] }"
"ConfigureStartPins_LastWrite"=dword:00000001

Import that into the registry of another Windows 11 machine:

then log on as a new user, and you’ll see the same result as above.

Categories: Windows 11

Tagged as: , , ,

1 reply »

  1. Thank you, this has worked a treat. It is frustrating that MS have removed any “official” way of doing this outside of MEM for those of us still deploying corporate builds via MECM.

    Like