This Blog is to help EUC Admin's to dynamically configure the Windows 10 Start Menu Layout for end user VDI sessions. This solution will use VMware AppVolumes and UEM to configure at user log on. This document will be configuring the Start Menu from the LOB aspect of entitlements.
Updates can be found here:
I suggest my clients to use AppStack Security Groups to make permissions and AppStack Entitlement easier to manage. You will notice the VDI structure has an AppStack OU to support all the security groups for the AV entitlement. This portion should be able to be changed to how you have your AV entitlement and continue to follow this document.
Note: We will reference the IT LOB/Dept going forward.
Assign your User Security Group(s) to the IT-DeptApps AppStack group.
That's all that is needed from the AV perspective.
This share structure will be the location you will maintain the default and all LOB/Dept Start Layout Modification files.Create a 'Start Layout' parent directory under your UEMConfig share and then your UEM Configuration Environment directory.Example: \\<DFS or Server>\uemshare\UEMConfig\UAT\_StartLayout
Note: I create UEM structure as: ...\UEMConfig\Environment\UEM Version\general
These settings need to be followed as described here, especially the conditions for the UEM 'ADMX-based Settings' definition. There is a '@Default' Start Layout for all users to have applied to their Windows 10 Start Menu.
You actually don't need this definition, but I am using this default Start Layout definition for two reasons.
All Start Layout XML files must be named LayoutModification.xml (Required)
Link to the full Microsoft DocumentThe OS reads the LayoutModification.xml file and only allows groups to be appended to Start. The groups have the following constraints:
IT admins can provision the Start layout by creating a LayoutModification.xml file. This file supports several mechanisms to modify or replace the default Start layout and its tiles.There is one
Application ID parameter type for the 'start:Tile ' element of the XML.
AppUserModelID - Use to specify any of the following:
There are two Application ID parameter types for the 'start:DesktopApplicationTile' element of the XML.
In the examples below you will notice there is GUIDs in the values of DesktopApplicationID parameters. Microsoft has associated GUIDs to Windows folders, the full list can be viewed here.Here are a few of the top most GUIDs used from my experiences.
<LayoutModificationTemplate Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6" xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
<start:Group Name="Company Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Internet Explorer\iexplore.exe" />
</start:Group>
<start:Group Name="Company Office 2013" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINWORD.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\EXCEL.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\POWERPNT.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\OUTLOOK.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\VISIO.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINPROJ.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\MSACCESS.EXE" />
</start:Group>
<start:Group Name="Company Self Support" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Desktop Service\UEM Refresh.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Immidio\Flex Profiles\Flex+ Self-Support.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Desktop Service\Devices and Printers.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
As you can see from the image above, my Start Menu displays all the shortcuts that are found in the @Default Stat Layout Modification XML and the title groups are not labeled by a department.
Added 'Global_Users_UEM-IT_Prod' security group to 'Global_AppStack_CoreApps'
As you notice in the above image, by adding the CoreApps AppStack the End-User still uses the @Default Layout XML file and displays the 'VLC Player' tile in Company Apps.
Now let’s look into the LOB/Dept Layout Modification Settings for the IT LOB/Dept.
This example will show you how to create a Start Layout for any LOB/Dept, but you can also added Sub-Dept groups, like Networking, Support, Security, and Server just to name a few.
I prefer to break my Start Layout XML file into LOB/Dept XML files, because I would rather have a little back-end management, then to have one Start Layout XML file that could cause a company-wide loss of the Start Menu from syntax or typo that someone makes while applying during production. You will see in the example below that you could in fact, with a little effort, put all your LOB/Dept/Sub-Dept/Groups all in one XML and manage them from UEM and AD permissions.
Note: This works for Windows 10 version 1511, but I hear their most likely will be a change in the August 2016 update from Microsoft. If there is a update to the way we can manage the Start Menu, you will need to make sure this process does not break with the new update.
Here are the IT-Dept and Sub-Group settings that will be used to show how this will work. I will be adding and removing permissions from the user via AD security groups. Skip down past this LayoutModification.xml example to see how you’re Start Menu will be viewed by an End-User when you apply the AD permissions.
<LayoutModificationTemplate Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6" xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
<start:Group Name="Company IT Dept Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Internet Explorer\iexplore.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\notepad.exe" />
<start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\VideoLAN\VLC\vlc.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\CommFort\CommFort.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\FileZilla FTP Client\filezilla.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Notepad++\notepad++.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\PuTTY\putty.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="6" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\TechSmith\Snagit 12\Snagit32.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="6" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company IT Apps\KeePass.lnk" />
</start:Group>
<start:Group Name="Company Network Team Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Network Team Apps\CiscoASDM-IDMLauncher.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\InterMapper RemoteAccess\InterMapper_RemoteAccess.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Klever\Nothings\PumpKIN.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\VanDyke Software\Clients\SecureCRT.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Wireshark\Wireshark.exe" />
</start:Group>
<start:Group Name="Company Office 2013" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINWORD.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\EXCEL.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\POWERPNT.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\OUTLOOK.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\VISIO.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINPROJ.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\MSACCESS.EXE" />
</start:Group>
<start:Group Name="Company OnBase Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company OnBase Apps\OnBase Client.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company OnBase Apps\Unity Client.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company OnBase Apps\OnBase Studio Client.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company OnBase Apps\OnBase Configuration Client.lnk" />
</start:Group>
<start:Group Name="Company Self Support" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Desktop Service\UEM Refresh.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Immidio\Flex Profiles\Flex+ Self-Support.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Desktop Service\Devices and Printers.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
Added 'Global_Users_UEM-IT_Prod' security group to 'Global_AppStack_IT-DeptApps'
<start:Group Name="Company IT Dept Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:Tile Size="2x2" Column="0" Row="0" AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Internet Explorer\iexplore.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\notepad.exe" />
<start:Tile Size="2x2" Column="0" Row="2" AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\VideoLAN\VLC\vlc.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\CommFort\CommFort.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\FileZilla FTP Client\filezilla.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Notepad++\notepad++.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\PuTTY\putty.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="6" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\TechSmith\Snagit 12\Snagit32.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="6" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company IT Apps\KeePass.lnk" />
Added 'Global_Users_UEM-IT_Prod' security group to 'Global_AppStack_NetworkTeamApps'
<start:Group Name="Company Network Team Apps" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%AppData%\Microsoft\Windows\Start Menu\Programs\Company Network Team Apps\CiscoASDM-IDMLauncher.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\InterMapper RemoteAccess\InterMapper_RemoteAccess.exe" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Klever\Nothings\PumpKIN.exe" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\VanDyke Software\Clients\SecureCRT.exe" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{6D809377-6AF0-444B-8957-A3773F02200E}\Wireshark\Wireshark.exe" />
Added 'Global_Users_UEM-IT_Prod' security group to 'AppBlock\Global_Users_Microsoft_Visio'
<start:Group Name="Company Office 2013" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINWORD.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\EXCEL.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\POWERPNT.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\OUTLOOK.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\VISIO.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINPROJ.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\MSACCESS.EXE" />
Notice the elements exist in the XML, since they don't have permissions to those applications which in turn, won't be visible on the Start Menu.
Added 'Global_Users_UEM-IT_Prod' security group to 'AppBlock\Global_Users_Microsoft_Access'
<start:Group Name="Company Office 2013" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINWORD.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\EXCEL.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="0" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\POWERPNT.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\OUTLOOK.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\VISIO.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="4" Row="2" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\WINPROJ.EXE" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="4" DesktopApplicationID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Microsoft Office\Office15\MSACCESS.EXE" />
Notice the elements exist in the XML, since they don't have permissions to those applications, which in turn won't show on the Start Menu.
There are two issues that I have seen while setting these Custom Start Menu configurations.
Mike,
Thanks
Sam
Great write up, but let me ask one thing. These are mandatory start menu tiles correct? This does not give end users the ability to update tiles themselves and have that retained, correct?
I think this is a great write again and hopefully many people use this to help in solving their Start Menu nightmares.
What would need to be done to retain user-created tiles?
That's a great question. You can't do that as of build 1511, now with the new update that Microsoft just released this month Microsoft supposedly has fixed the Start Layout issues and should have more flex ability. I have not had the chance to test yet, to see if that is true.
If anyone gets to it before I do, let us know here.
Do you know if its possible to retain the users' "Most Used" applications list in the start menu? It was very easy in Windows 7, but the same import/export settings do not work in Windows 10. If it is possible, do you know how?
It is not possible as of this release of Windows 10 v1511. I have not looked to see v1607, that was just released, has any improvements in this area.
I will make some updates, we have done this with version 1511 in the military. To do this we need to use some Microsoft tools, this will not be a UEM only process.
I'm anxious to see this in action. Thanks!
Hi Mike,
How can we persist user based start menu customization across the sessions in floating pools desktop?
for example: user-1 is interested to place his/her interested application short-cut in start menu
I am using UEM 9.1
App volumes 2.11
Windows-10 1607
floating pools
This can be done, but not the way this post is describing. At least I believe.
There are two options for doing this as far as I know:
Option 1: Managing Windows 10 with VMware User Environment Manager
My only issue with this option is Edge wants to be placed on the taskbar at every login (on a non-persistent desktop) whether you remove it or not as the user. If anyone knows a workaround for that issue let me know.
Option 2: Have UEM copy the actual database for the Windows 10 start menu and have this as part of the user's profile.
<LocalAppData>\TileDataLayer
<LocalAppData\Microsoft\Windows Explorer
This sounds easy in theory, but there are two services that need to be stopped before the database files can be copied off. They are the staterepository and the tiledatamodelsvc. You may be able to get by with only stopping the tiledatamodelsvc service. To do this though requires some workarounds as UEM can't stop the service because the service is run as system, so either in the gold image you need to change the permissions on the service so that the users can stop it or you need to find some other way to stop it before UEM goes to export the profile or it will fail to export the database.
Hi Jmatz,
"My only issue with this option is Edge wants to be placed on the taskbar at every login (on a non-persistent desktop) whether you remove it or not as the user. If anyone knows a workaround for that issue let me know"
Just pin the short-cut of Edge on taskbar in Parent image and take snapshot of it and use it
In order to prevent Edge from being pinned on non-persistent desktops, and also preserve user taskbar pinned items, I had to create logoff tasks to save the users "Quick Launch" and regs for the taskbar, as well as a run-once PS script to import them after explorer.exe loads:
**this requires having a matching "quick launch" folder and regs from your test/staging profile with the default pinned items that you want users to have** |
---|
$arguments = "import $PSScriptRoot\taskbar_default.reg" start-process $env:windir\system32\reg.exe -argumentlist $arguments -windowstyle hidden Copy-Item -Path $PSScriptRoot\Quicklaunch\* -Destination $env:UserProfile'\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch' -Recurse -Force Stop-Process -ProcessName explorer -Force |
4. create c:\windows\taskbar\taskbar.ps1 with the following content:
$arguments = "import $env:UserProfile\exportedtaskbar.reg" start-process $env:windir\system32\reg.exe -argumentlist $arguments -windowstyle hidden Copy-Item -Path $env:UserProfile'\Quick launch\*' -Destination $env:UserProfile'\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch' -Recurse -Force Stop-Process -ProcessName explorer -Force |
5. taskbar UEM ini file:
[IncludeFiles] <UserProfile>\exportedtaskbar.reg [IncludeFolderTrees] <UserProfile>\Quick Launch **PREDEFINED DEFAULT SETTING** [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce] "taskbar"="Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\\\\Windows\\\\taskbar\\\\taskbar_default.ps1" **PREDEFINED PARTIALLY-ENFORCED SETTING** [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce] "taskbar"="Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\\\\Windows\\\\taskbar\\\\taskbar.ps1" |
Kumar,
How would this stop the Edge short-cut from being created by the Windows process that creates the start menu on login? The reason why in non-persistent desktops this is an issue is because you need to exclude the HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\StartMenuInit registry value which means that the start menu will be created by Windows at login using the values in your LayoutModification.xml file. The problem is that as part of that process it also creates the Edge shortcut on the taskbar as far as I can tell. Removing it in the gold image, or mandatory profile or trying to replace it in any of those places doesn't seem to do anything.
You're right! My setup does not stop the Edge shortcut from being created when the user profile is created. What it does is removes the pinned Edge icon after Windows pins it. It does this by overwriting the HKCU tree and the "Quick Launch" folder that contains the Edge shortcut assets with ones that do not. Then, it restarts explorer.exe so that the change is apparent.
VDIMega,
Yeah, I figured I could do scripts to capture and replace the taskbar. I was kind of wanting to avoid using a powershell script that runs at every login, but I guess I may just resort to that.
On another note, you can actually use a different method to import the default taskbar settings instead of using this section:
**PREDEFINED DEFAULT SETTING**
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce]
"taskbar"="Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\\\\Windows\\\\taskbar\\\\taskbar_default.ps1"
You can make the original default LayoutModification.xml file like this (with the layout you desire of course):
<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" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6" xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
<start:Group Name="Internet and Networking" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk" />
</start:Group>
<start:Group Name="Microsoft Office" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft Outlook 2010.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft PowerPoint 2010.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="0" Row="2" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft Word 2010.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft Excel 2010.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
<CustomTaskbarLayoutCollection PinListPlacement="Replace">
<defaultlayout:TaskbarLayout>
<taskbar:TaskbarPinList>
<taskbar:DesktopApp DesktopApplicationLinkPath="%appdata%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk" />
<taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\System Tools\File Explorer.lnk" />
</taskbar:TaskbarPinList>
</defaultlayout:TaskbarLayout>
</CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
This on first launch will actually create the start menu AND taskbar however you would like it to be set up. The problem is the Export-StartLayout powershell command won't export the taskbar settings into the xml file for later use (as far as I can tell) so after first login when you use the command to export the user's layout this one will be overwritten in the user's profile with one that does not have any taskbar layout customizations and thus Edge shows up again.
I tried using export/import-startmenulayout, but it was causing significant logon/logoff delays, so I had to stop doing that.
I haven't seen any delays. Maybe a little on logout, but I'm not too concerned about that. On login though you don't actually do any Import-StartMenuLayout. You just have UEM capture the user's LayoutModification.xml file:
[IncludeFiles]
<LocalAppData>\Microsoft\Windows\Shell\LayoutModification.xml
When windows calls the start menu initialization (which it does because you don't capture StartMenuInit registry value) it checks for that file and creates the start menu based upon that. No need for any powershell script to import the layout. My logins for Windows 10 on a non-persistent desktop with customized start menu layouts is around 20-25 seconds. I just have that Edge shortcut on the taskbar.
I tried doing export-startlayout into %localappdata%\Microsoft\Windows\Shell\LayoutModification.xml as a logoff task but it would take upto 40 seconds to logoff. Sometimes it would take so long that the VM would start refreshing before it could even finish running.
Even then, letting Windows organically grab the layoutmodification.xml added 10-15 seconds to the login time here. That would have been fine, but App Volumes adds another 30, and GPO with adds 10. So we were at over a minute for login times, which was not accepted by management. 20-25 seconds without two appstacks sounds feasible though.
The Edge icon on the taskbar also isn't accepted here, so I had to come up with this long-winded way to get rid of it.
This worked perfectly for my non-persistent Windows 10 desktops: