Intune Autopilot – Prepopulate the Startmenu

It might be not that popular with Windows 10, but every company wants a well curated startmenu, rather than the default delivered from Microsoft:

We have multiple Options to configure the startmenu, I’m sure I don’t know them all. But when it comes to Windows 10 and Intune autopilot, we do not really have an option as what I have considered. This blog tries to catch the available options we currently have with Intune and Autopilot.

I have checked the Option to set the startmenu trough the Intune settings:
Customize Windows 10 Start and taskbar with mobile device management (MDM)
But as already outlined on this Microsoft doc article, the startmenu will be locked, or at least partially locked:

And I do not want this behavior, I want to prepopulate the startmenu, but the user can arrange whatever he wants afterwards. Then I thought of a provisioning pack created with the Windows Configuration Designer. But unfortunately there does not exist an native option to deploy such a package through Windows Intune. You can vote on this UserVoice topic if you would like to change that:
Intune Feedback: Native deployment of provisioning packages as deployment type

With this, I was not able to find a working solution, since also the Intune Management Extension kicks in, after the user has logged in, and the startmenu would be already present.
I then have thought of modifying a Windows 10 Image and import the Startmenu Layout modification. So I extracted a current Windows 10 1809 image with dism, and started with the modifications.

I have added the automatic Autopilot registration to the Windows 10 image, and also the startmenu. To configure a modified Windows 10 installation with an automatic Intune Autopilot registration, follow the following article from Microsoft, except the adjustments below:
Windows Autopilot for existing devices
Within this article, it is explained how you gain the required JSON file, which we have to add to the image. If you follow the blog, we just need to copy the JSON file to the following location:
The folder does not exist and has to be created.

After this is done, we can add the startmenu modification to the extracted wim file. Unfortunately I had no luck with the PowerShell command Import-StartLayout to add the modification to the image. I the simply copied my modified startmenu XML to the following location:
Make sure that the xml file is named “LayoutModification.xml”.

If this is done, we can commit our changes to the wim file by using dism with /commit (handling of wim files is documented on various blogs like here).
I wanted to have a bootable ISO file, which I can use in VMs as well if I copy them on removable storage. I failed by creating a bootable Windows 10 ISO multiple times, until I found this blog from Ed Tittel (twitter), which perfectly shows an example of creating a bootable ISO:
Create a Custom ISO for Windows 10 — Part 5 of 6
I just copy the example from there, to have it archived for sure:
oscdimg.exe -m -o -u2 -udfver102 -bootdata:2#p0,e,bd:\iso_files\boot\,e,bd:\iso_files\efi\microsoft\boot\efisys.bin d:\iso_files d:\Win10PROx64.iso
(again, all credits go to Ed)

Ending up with a bootable ISO file, I tried on a VM, and everything worked fine. The Autopilot Profile kicked in, and also the Startmenu was as expected:

5 thoughts on “Intune Autopilot – Prepopulate the Startmenu

  1. Buddy, as you boot from an ISO, you could also use the autounattend.xml and a PowerShell script to inject the startmenu. Or was that not an option?

    • did not think about that. but since I wanted to add the autopilot JSON, I was required to modify the WIM anyway. So I then came to the conclusion, adding other modifications like startmenu would fit into that process as well.
      but if you don’t want to touch the wim, this could be a solution too

  2. I believe I achieved this by adding the following lines to the .xml uploaded to Intune. The key is the “OnlySpecifiedGroups”. You also have to uninstall whichever apps come with the default defaultlayout.xml if you don’t want them.

    <start:Group Name=

    • I think the lines were removed from my reply.. just in case, what’s needed is the following with the correct xml syntax.

      DefaultLayoutOverride LayoutCustomizationRestrictionType=OnlySpecifiedGroups

      <start:Group Name="

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

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