Intune Deploy Windows 10 Default Start Menu

Intune Deploy Windows 10 Default Start Menu

I recently discovered that I caused an unintended side effect on Windows 10 when deploying a default taskbar for all users.

In my post Intune Deploy Default Taskbar I inadvertently introduced a bug to the Windows 10 Start Menu making it so users can’t customize anything.

The bug is that users can pin programs to the taskbar but they can’t pin anything to the Start Menu and they also can’t change anything in the Start Menu.

Can’t pin Microsoft Access to the Start Menu on Windows 10

The issue does not impact Windows 11 as the way the Windows 11 Start Menu layout uses JSON and the Windows 10 Start Menu layout uses XML, the same XML file that is used for the default taskbar.

I am happy to allow users to customize their Start Menu as much as they want but I do want a consistent user experience for all. Most users likely won’t change anything, but the ones that do want to customize their Start Menu would be blocked.

In this post, I will show you step-by-step how to fix the bug and how to deploy a partial custom Start Menu for Windows 10 using Microsoft Intune.

The Process

The application group name will also be deployed. I named my application group Company Name for this example but you can make it whatever you want.

I don’t want the custom Start Menu application group to be very intrusive so I will use 1×1 icons for all the common Microsoft applications and I will use 2×2 icon for Company Portal as Company Portal is still new for a lot of people.

Source Windows 10 Start Menu application group

This is what my initial Start Menu XML file looks like.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
        <start:Group Name="Productivity">
          <start:Folder Name="" Size="2x2" Column="2" Row="0">
            <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.SkypeApp_kzf8qxf38zg5c!App" />
            <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.Office.OneNote_8wekyb3d8bbwe!microsoft.onenoteim" />
          </start:Folder>
          <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe!Microsoft.MicrosoftOfficeHub" />
          <start:Tile Size="2x2" Column="4" Row="2" AppUserModelID="Microsoft.Todos_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="microsoft.windowscommunicationsapps_8wekyb3d8bbwe!Microsoft.WindowsLive.Mail" />
        </start:Group>
        <start:Group Name="Explore">
          <start:Folder Name="Play" Size="2x2" Column="4" Row="2">
            <start:Tile Size="2x2" Column="2" Row="0" AppUserModelID="SpotifyAB.SpotifyMusic_zpdnekdrzrea0!Spotify" />
            <start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.GamingApp_8wekyb3d8bbwe!Microsoft.Xbox.App" />
            <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="DolbyLaboratories.DolbyAccess_rz1tebttyb220!App" />
            <start:Tile Size="2x2" Column="4" Row="2" AppUserModelID="A278AB0D.DisneyMagicKingdoms_h6adky7gbf63m!App" />
          </start:Folder>
          <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="4DF9E0F8.Netflix_mcm4njqhnhss8!Netflix.App" />
          <start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="2" Row="0" AppUserModelID="Microsoft.BingWeather_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.WindowsStore_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.BingNews_8wekyb3d8bbwe!AppexNews" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

I will remove lines 16 to 38 as they aren’t needed and are just junk from my source system.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
        <start:Group Name="Productivity">
          <start:Folder Name="" Size="2x2" Column="2" Row="0">
            <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.SkypeApp_kzf8qxf38zg5c!App" />
            <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.Office.OneNote_8wekyb3d8bbwe!microsoft.onenoteim" />
          </start:Folder>
          <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe!Microsoft.MicrosoftOfficeHub" />
          <start:Tile Size="2x2" Column="4" Row="2" AppUserModelID="Microsoft.Todos_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="microsoft.windowscommunicationsapps_8wekyb3d8bbwe!Microsoft.WindowsLive.Mail" />
        </start:Group>
        <start:Group Name="Explore">
          <start:Folder Name="Play" Size="2x2" Column="4" Row="2">
            <start:Tile Size="2x2" Column="2" Row="0" AppUserModelID="SpotifyAB.SpotifyMusic_zpdnekdrzrea0!Spotify" />
            <start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.GamingApp_8wekyb3d8bbwe!Microsoft.Xbox.App" />
            <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="DolbyLaboratories.DolbyAccess_rz1tebttyb220!App" />
            <start:Tile Size="2x2" Column="4" Row="2" AppUserModelID="A278AB0D.DisneyMagicKingdoms_h6adky7gbf63m!App" />
          </start:Folder>
          <start:Tile Size="2x2" Column="2" Row="2" AppUserModelID="4DF9E0F8.Netflix_mcm4njqhnhss8!Netflix.App" />
          <start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="2" Row="0" AppUserModelID="Microsoft.BingWeather_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.WindowsStore_8wekyb3d8bbwe!App" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.BingNews_8wekyb3d8bbwe!AppexNews" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

After those changes, I now have a Start Menu XML file that looks like this.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

I am going to deploy a partial Start Menu layout as I just want to create a consistent user experience and I don’t mind if the users tweak their Start Menu.

This makes it so we only deploy the application group we specify and don’t lock down the whole Start Menu.

This is what the Start Menu XML file should look like now.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride LayoutCustomizationRestrictionType="OnlySpecifiedGroups">
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

If you only want to deploy a custom Start Menu then you are done and can skip to the Intune Deployment section. If you are using a custom default taskbar this will wipe out those settings or start causing conflicts.

The Start Menu layout configuration and the default taskbar configuration use the same XML file. To keep the default taskbar settings and deploy the Start Menu layout configuration we need to combine them into a single XML file.

Combine with default taskbar

Adding that line allows the Start Menu XML file to also control the taskbar.

The first line of the Start Menu XML file should look like this

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification" xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout">

This is the XML of the default taskbar that I’ll be using

<LayoutModificationTemplate
    xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
    xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
    xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
    xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
    Version="1">
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"/>
        <taskbar:DesktopApp DesktopApplicationID="Microsoft.Windows.Explorer" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Outlook.lnk" />
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

For me, that is everything from lines 7 to 15 from the taskbar XML file.

<LayoutModificationTemplate
    xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
    xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
    xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
    xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
    Version="1">
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"/>
        <taskbar:DesktopApp DesktopApplicationID="Microsoft.Windows.Explorer" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Outlook.lnk" />
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

For me, that is line 18 in the Start Menu XML file.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification" xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride LayoutCustomizationRestrictionType="OnlySpecifiedGroups">
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

This is what my Start Menu XML file looks like after I injected the default taskbar settings.

<LayoutModificationTemplate xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification" xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout">
  <LayoutOptions StartTileGroupCellWidth="6" />
  <DefaultLayoutOverride LayoutCustomizationRestrictionType="OnlySpecifiedGroups">
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6">
        <start:Group Name="Company Name">
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="0" DesktopApplicationID="Microsoft.SkyDrive.Desktop" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="1" DesktopApplicationID="Microsoft.Office.OUTLOOK.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="0" DesktopApplicationID="Microsoft.Office.EXCEL.EXE.15" />
          <start:DesktopApplicationTile Size="1x1" Column="2" Row="1" DesktopApplicationID="Microsoft.Office.POWERPNT.EXE.15" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.CompanyPortal_8wekyb3d8bbwe!App" />
          <start:Tile Size="1x1" Column="3" Row="0" AppUserModelID="MSTeams_8wekyb3d8bbwe!MSTeams" />
          <start:DesktopApplicationTile Size="1x1" Column="0" Row="0" DesktopApplicationID="MSEdge" />
          <start:DesktopApplicationTile Size="1x1" Column="1" Row="1" DesktopApplicationID="Microsoft.Office.WINWORD.EXE.15" />
        </start:Group>
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"/>
        <taskbar:DesktopApp DesktopApplicationID="Microsoft.Windows.Explorer" />
        <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Outlook.lnk" />
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
Code language: HTML, XML (xml)

Intune Deployment

Now we need to configure Microsoft Intune to deploy the custom Start Menu Layout.

If you are already deploying the default taskbar you can just replace the XML in that configuration profile. If you aren’t this is how to create the configurations profile for the Start Menu layout deployment.

In my setup, I’m going to use the same groups that are used to target the Microsoft Office and Company Portal installs which happens when the device is onboarded to Intune so I don’t need to worry about Microsoft Office or Company Portal not being installed.

I’m also going to use a filter mode of include to only target Windows 10 devices. You can read more about the device filters I like to use and how to create them in my post called Intune Device Filters.

Windows 10 Partial Start Menu layout deployed. The ability to pin items like Microsoft Access to the Start Menu is restored.

That’s all it takes to deploy a standard Start Menu layout and taskbar as the default for all users by using Microsoft Intune.

If you want to read more about deploying the Windows 10 Start Menu here is the Microsoft documentation about it.

Exit mobile version