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 2017-05-02: 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 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:
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.
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.