Roam File and URL associations on Windows 10

Version 5

    Windows 10 does not let you roam file type associations. DISM and Group Policy give administrators the ability to create default associations. However standard users can not run DISM. The solution I came up with uses powershell to create the xml and a batch file to copy it into place. This prevents those pesky metro apps from taking over your associations. It is better than trying to persist HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts and HKCU\SOFTWARE\Microsoft\Windows\Shell\Associations because the user is still prompted for interaction.

     

    Requires Enterprise SKU. Tested with LTSB 1607.

     

    Begin by creating and importing a default fta xml on the golden image using dism like in this article "How to force only a set of file associations? "

    https://logs.technet.microsoft.com/windowsinternals/2017/10/25/windows-10-how-to-configure-file-associations-for-it-pros then continue below.

     

    1) Create a GPO (Local or Doamin) that sets the associations xml file:

      GPO/Computer Configuration/Administratice Templates/Windows Components/File Explorer/Set a default associations configuration/Enabled/Default Associations Configuration File/c:\temp\CustomAssociations.xml

    2) On the golden image, copy CustomAssociations.ps1 and CustomAssociations.cmd to c:\temp

    3) You can leave a default CustomAssociations.xml in c:\temp that will override the dism imported one.

    4) Create a UEM Config that stores the generated xml:

      [IncludeFiles]

      <UserProfile>\CustomAssociations.xml

    5) Create a UEM Logoff task that runs CustomAssociations.ps1 before profile export:

      c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass c:\temp\CustomAssociations.ps1

    6) Create a UEM Logon task that runs CustomAssociations.cmd after profile import:

      c:\temp\CustomAssociations.cmd

    7) recompose

     

     

    Note: the xml must be UTF8

     

    Update:

    Thanks to Pim_van_de_Vis! He noticed that the powershell took an abnormal amount of time to run (20 seconds). I uploaded new version that should run faster (less than a second). Removed lines from powershell that tried to determine nice "ApplicationName". It turns out that this parameter is not needed for it to be ingested properly.

     

    Update:

    Thanks to AlekseiS  for pointing out the need for having an initial dism import and the Ms article.