You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							2.6 KiB
						
					
					
				# Set-FileAssoc.ps1 - a script to change Windows 10 file associations
 | 
						|
 | 
						|
 | 
						|
## What?
 | 
						|
This script allows a user or an IT administrator to change user file associations in Windows 10.
 | 
						|
 | 
						|
## Why?
 | 
						|
User file associations in newer versions of Windows are normally protected from an unauthorized change, and therefore can only be set interactively through Settings app, or using a XML file pushed through GPO.
 | 
						|
 | 
						|
The XML method has several drawbacks:
 | 
						|
- IT administrator has to keep track of any new associations when a Windows Feature Update gets released;
 | 
						|
- if the computer is not in a domain, associations can only be set in a reference image, and as a result:
 | 
						|
    - apps also have to be pre-built in your image;
 | 
						|
    - once an user changes one of their file associations, it cannot be set back using the XML method.
 | 
						|
 | 
						|
A [SetUserFTA tool](https://kolbi.cz/blog/2017/10/25/setuserfta-userchoice-hash-defeated-set-file-type-associations-per-user) has been made in 2017 to combat this limitation. However, it is also not a perfect solution:
 | 
						|
- it only changes associations for the user that launched the tool;
 | 
						|
- this is problematic if computers are managed by means of a remote configuration administration tool, like Ansible;
 | 
						|
- workarounds to run SetUserFTA in different user contexts exist, but they are also not ideal;
 | 
						|
- closed-source model.
 | 
						|
 | 
						|
For my personal use case (domainless network of Ansible-managed Windows 10 nodes with a "bleeding-edge" update policy), a different approach was needed, therefore, this script was made.
 | 
						|
 | 
						|
# How?
 | 
						|
1. Download the script;
 | 
						|
2. Specify mandatory parameters - file extension and a ProgID (extension handler):
 | 
						|
    - `-Extension .pdf -ProgID SumatraPDF`
 | 
						|
    - `-Extension .html -ProgID ChromeHTML`
 | 
						|
3. Set the user context in which this script should run:
 | 
						|
    - current user only: `-CurrentUser`
 | 
						|
    - all users: `-AllUsers`
 | 
						|
    - specific users: `-Users user1, user2`
 | 
						|
4. Run the script:
 | 
						|
    - `.\Set-FileAssoc.ps1 -Extension .pdf -ProgID SumatraPDF -CurrentUser`
 | 
						|
    - (shorthand version) `.\Set-FileAssoc.ps1 .pdf SumatraPDF`
 | 
						|
 | 
						|
## Is that... legal?
 | 
						|
This script is a product of reverse-engineering Windows binaries. Therefore, if your organization has to strictly adhere to Microsoft EULA, it may be problematic, legal-wise, to use this script, because:
 | 
						|
- it circumvents the measures set in place by Microsoft to prevent tampering with file associations and user experience;
 | 
						|
- it uses features that were implemented by reverse-engineering binaries that are "legally protected" from being reverse-engineered.
 | 
						|
 | 
						|
Consult your legal department for guidance.
 | 
						|
 | 
						|
## Credits
 | 
						|
Christoph Kolbicz for SetUserFTA: https://kolbi.cz
 | 
						|
 |