Customising the Start Menu and Taskbar with Windows 10 1607/1703

This week I’ve gone pretty deep down the rabbit hole of automating the Start Menu and Taskbar layouts during an MDT Task Sequence.

Update 02/05/2017: This also works with Windows 10 1703 (Creators Update)

As every device I’m deploying will have the same customisation I wanted to automate it during the build or deploy Task Sequence, rather than applying it via domain Group Policy to reduce limited network bandwidth, keep Group Policy as light as possible and reduce login times as much as possible.

Update to this post: How to partially lock down the Start Menu.

A new (and extremely welcome) feature of Windows 10 1607 is the ability to customise the Taskbar layout, there’s a very good post over on TechNet about it here.

With this post in mind, I used one of my reference images and customised the Start Menu layout and exported it via everyone’s favourite PowerShell command:

Export-StartLayout C:\StartLayout.xml

As the TechNet post says, you can add the extra xml data necessary to configure the Taskbar layout, although in the end I did just write my own xml file from scratch. Here’s what my final xml file looked like:

<?xml version="1.0" encoding="utf-8"?>
<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">
  <LayoutOptions StartTileGroupCellWidth="6" StartTileGroupsColumnCount="1" />
  <DefaultLayoutOverride>
    <StartLayoutCollection>
      <defaultlayout:StartLayout GroupCellWidth="6" xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
        <start:Group Name="Web Browsers" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
          <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk" />
          <start:Tile Size="2x2" Column="4" Row="0" AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" />
          <start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Google Chrome.lnk" />
		</start:Group>
        <start:Group Name="Microsoft Office 2016" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
          <start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Word 2016.lnk" />
          <start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Publisher 2016.lnk" />
          <start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\PowerPoint 2016.lnk" />
          <start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Outlook 2016.lnk" />
          <start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Excel 2016.lnk" />
          <start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Access 2016.lnk" />
        </start:Group>        
      </defaultlayout:StartLayout>
    </StartLayoutCollection>
  </DefaultLayoutOverride>
    <CustomTaskbarLayoutCollection PinListPlacement="Replace">
      <defaultlayout:TaskbarLayout>
        <taskbar:TaskbarPinList>
          <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk" />
          <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\System Tools\File Explorer.lnk" />
        </taskbar:TaskbarPinList>
      </defaultlayout:TaskbarLayout>
    </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>

StartLayout

When deploying the customisation you may have missing icons, for example the Internet Explorer icon may be missing. This is most likely due to the location of the Internet Explorer.lnk file being a part of the users profile – customisation is applied before the file exists, so it’s removed. To work around this I recommend copying the Internet Explorer.lnk file to the %alluserprofile% Start Menu as part of your deployment and (as above) editing the StartLayout.xml file to reference the new location of the file. I recommend doing this for any .lnk files that aren’t in a public/all users location.

If you intend on deploying this Start Menu/Taskbar layout customisation during the image build process via the Import-StartMenu PowerShell commandlet, then you may, as I did, encounter a problem. One of the final things my image build task sequence does is apply customisation to the Administrator users profile, which is then copied for use as the Default profile during the deploy Task Sequence, using the CopyProfile unattend.xml option. The problem is that by using the Import-StartLayout command, this only sets the layout for the Start Menu and Taskbar for new profiles created from that point on wards. The CopyProfile option does not set the Start Menu/Taskbar layout, as it’s not a part of the Administrators profile.

So what do we do? Well, you can just set it via GPO and call it a day, but I absolutely wanted it to be a part of the image, so I looked into setting it as a local group policy option during the image build task sequence. This also failed to take effect when deploying the image. I’m led to believe (as silly as this might sound) that the reason for this is that the StartMenuLayout.xml that the group policy was configured to use needs to be newer than the OS deployment, as in the date stamp needs to be after. So what I finally did was copy the StartMenuLayout.xml file and set the local group policy option late during the deployment Task Sequence, thus the .xml file is “newer” than the OS install and the local group policy option ensures that the setting it applied for every user than logs on, without hitting domain Group Policy.

-Mike @Digressive

4 thoughts on “Customising the Start Menu and Taskbar with Windows 10 1607/1703

  1. Have you noticed that when people upgrade from 1607 to 1703, their personally-pinned start menu items disappear? This is with a partial start menu layout applied via GPO. Also, if they logon with 1703 while off the network, the start menu reverts to the default layout. If they logon again while on the network, the custom start menu is back, but once again their personally-pinned items are gone. Big bug.

    Like

    1. I hadn’t noticed this personally, thanks for the heads up. I think there’s still some work that needs to be done regarding customising the Start Menu layout for sure. Microsoft seem to be listening a lot more to feedback these days, mainly through the Feedback app, and with the Windows Insider Program for Business, I’d say this is a perfect example of something to bring up in these forums.

      Like

Leave a Reply

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

WordPress.com Logo

You are commenting using your WordPress.com 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 )

Google+ photo

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

Connecting to %s