Windows 10 Customization

Here are a few customization that can be done on a Windows 10 image.

  1. Enable PowerShell Remoting
  2. Configure Remote Desktop
  3. Enable App-V
  4. Make IE the Default Browser
  5. Disable Quick Access: Recent Files
  6. Disable Quick Access: Frequent Folders
  7. Change Explorer Home Screen back to This PC
  8. Set Lock Screen
  9. Set Wallpaper
  10. Remove Built-in Apps
  11. Remove Edge Welcome Screen and Disable Prompt for Default Browser.
  12. Add “Run as Different User” in Context Menu
  13. Turn Off “Microsoft Consumer Experience”
  14. Disable “File Explorer Suggestion”

.

.

1. Enable PowerShell Remoting

PowerShell

# Enable Powershell Remoting
Write-Host "Enable Powershell Remoting"
Try {
    Enable-PSRemoting –force
    Write-Host "Powershell Remoting successfully enabled"
} 
Catch {
    Write-Host "Exception caught in enabling Powershell Remoting : $error[0]"
}

.

.

2. Configure Remote Desktop

PowerShell

# Configure Remote Desktop
Write-Host "Configure Remote Desktop"
Try {
	Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" –Value 0
	Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
	Write-Host "Remote Desktop successfully configured"
} 
Catch {
	Write-Host "Exception caught in configuring Remote Desktop : $error[0]"
}

.

.

3. Enable App-V

PowerShell

## Enable App-V
Write-Host "Enable App-V"
Try {
	Enable-Appv
	Write-Host "App-V successfully enabled"
} 
Catch {
	Write-Host "Exception caught in enabling App-V : $error[0]"
}

.

.

4. Make IE the Default Browser

PowerShell

## Make IE the default browser
Write-Host "Make IE the default browser using DSIM"
Try {
	Dism /online /import-defaultappassociations:"C:\Temp\IEDefaultBrowser.xml"
	Write-Host "IE successfully set as default browser"
} 
Catch {
	Write-Host "Exception caught in making IE the default browser : $error[0]"
}

.

Following the content of IEDefaultBrowser.xml:

XML

<?xml version="1.0" encoding="UTF-8"?>
<DefaultAssociations>
    <Association Identifier=".htm" ProgId="IE.AssocFile.HTM" ApplicationName="Internet Explorer" />
    <Association Identifier=".html" ProgId="IE.AssocFile.HTM" ApplicationName="Internet Explorer" />
    <Association Identifier=".mht" ProgId="IE.AssocFile.MHT" ApplicationName="Internet Explorer" />
    <Association Identifier=".mhtml" ProgId="IE.AssocFile.MHT" ApplicationName="Internet Explorer" />
    <Association Identifier=".partial" ProgId="IE.AssocFile.PARTIAL" ApplicationName="Internet Explorer" />
    <Association Identifier=".svg" ProgId="IE.AssocFile.SVG" ApplicationName="Internet Explorer" />
    <Association Identifier=".url" ProgId="IE.AssocFile.URL" ApplicationName="Internet Browser" />
    <Association Identifier=".xht" ProgId="IE.AssocFile.XHT" ApplicationName="Internet Explorer" />
    <Association Identifier=".xhtml" ProgId="IE.AssocFile.XHT" ApplicationName="Internet Explorer" />
    <Association Identifier="ftp" ProgId="IE.FTP" ApplicationName="Internet Explorer" />
    <Association Identifier="http" ProgId="IE.HTTP" ApplicationName="Internet Explorer" />
    <Association Identifier="https" ProgId="IE.HTTPS" ApplicationName="Internet Explorer" />
    <Association Identifier="mk" ProgId="IE.HTTP" ApplicationName="Internet Explorer" />
    <Association Identifier="res" ProgId="IE.HTTP" ApplicationName="Internet Explorer" />
</DefaultAssociations>

.

.

5. Disable Quick Access: Recent Files

Using PSADT:

# Disable Quick Access: Recent Files
Write-Log "Disable Quick Access: Recent Files"
Write-Log "Add HKCU registry for all existing profiles + default user"
[scriptblock]$HKCURegistrySettings = {
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer' -Name 'ShowRecent' -value '0' -Type Dword -SID $UserProfile.SID
}
Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

.

.

6. Disable Quick Access: Frequent Folders

Using PSADT:

# Disable Quick Access: Frequent Folders
Write-Log "Disable Quick Access: Frequent Folders"
Write-Log "Add HKCU registry for all existing profiles + default user"
[scriptblock]$HKCURegistrySettings = {
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer' -Name 'ShowFrequent' -value '0' -Type Dword -SID $UserProfile.SID
}
Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

.

.

7. Change Explorer Home Screen back to This PC

Using PSADT:

# Change Explorer home screen back to This PC
Write-Log "Change Explorer home screen back to This PC"
Write-Log "Add HKCU registry for all existing profiles + default user"
[scriptblock]$HKCURegistrySettings = {
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'LaunchTo' -value '1' -Type Dword -SID $UserProfile.SID
}
Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

.

.

8. Set Lock Screen

PowerShell

# Set Lock Screen
Write-Host "Set Lock Screen"
Try {
	Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" -Name "LockScreenImage" –Value “C:\\Windows\\Web\\Wallpaper\\MyCompany\\Lockscreen.jpg”
	Write-Host "Lock Screen successfully configured"
} 
Catch {
	Write-Host "Exception caught in configuring Lock Screen : $error[0]"
}

.

.

9. Set Wallpaper

Using PSADT:

# Set the Corporate Wallpaper
Write-Log "Set the Corporate Wallpaper"
Write-Log "Add HKCU registry for all existing profiles + default user"
[scriptblock]$HKCURegistrySettings = {
	Set-RegistryKey -Key 'HKCU:Control Panel\Desktop' -Name 'Wallpaper' -value 'C:\Windows\Web\Wallpaper\Corporate\BackgroundDefault.jpg' -Type String -SID $UserProfile.SID
}
Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

.

.

10. Remove Built-in Apps

The following script allows to uninstall all Built-in Apps except a list of essential Apps

PowerShell

 

# Get a list of all apps
$AppArrayList = Get-AppxPackage -PackageTypeFilter Bundle | Select-Object -Property Name, PackageFullName | Sort-Object -Property Name

# Loop through the list of apps
foreach ($App in $AppArrayList) {
	# Exclude essential Windows apps
	if (($App.Name -in "Microsoft.WindowsCalculator", "Microsoft.Appconnector", "Microsoft.WindowsSoundRecorder", "Microsoft.DesktopAppInstaller", "Microsoft.Messaging")) {
		Write-Host "Skipping essential Windows app: $($App.Name)"
	}

	# Remove AppxPackage and AppxProvisioningPackage
	else {
		# Gather package names
		$AppPackageFullName = Get-AppxPackage -Name $App.Name | Select-Object -ExpandProperty PackageFullName
		$AppProvisioningPackageName = Get-AppxProvisionedPackage -Online | Where-Object { $_.DisplayName -like $App.Name } | Select-Object -ExpandProperty PackageName

		# Attempt to remove AppxPackage
		try {
			Write-Host "Remove AppxPackage: $($AppPackageFullName)"
			Remove-AppxPackage -Package $AppPackageFullName -ErrorAction Stop
		}
		catch [System.Exception] {
			Write-Host "Remove AppxPackage: $($AppPackageFullName) FAILED"
			Write-Host "Exception caught in importing AppxPackage : $_.Exception.Message"
		}

		# Attempt to remove AppxProvisioningPackage
		try {
			Write-Host "Remove AppxProvisioningPackage: $($AppProvisioningPackageName)"
			Remove-AppxProvisionedPackage -PackageName $AppProvisioningPackageName -Online -ErrorAction Stop
		}
		catch [System.Exception] {
			Write-Host "Remove AppxProvisioningPackage: $($AppProvisioningPackageName) FAILED"
			Write-Host "Exception caught in importing AppxProvisioningPackage : $_.Exception.Message"
		}
	}
}

.

The following script allows to uninstall some Windows Apps:

PowerShell

 

# Remove Get Office
Write-Host "Remove Get Office"
try {
	get-appxpackage *officehub* | remove-appxpackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing Get Office : $_.Exception.Message"
}
		
# Remove Microsoft Solitaire Collection
Write-Host "Remove Microsoft Solitaire Collection"
try {
	get-appxpackage *solitaire* | remove-appxpackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing Microsoft Solitaire Collection : $_.Exception.Message"
}
				
# Remove OneDrive
Write-Host "Remove OneDrive"
Show-InstallationWelcome -CloseApps 'OneDrive' -BlockExecution -Silent
Execute-Process -Path 'C:\Windows\SysWOW64\OneDriveSetup.exe' -Parameters '/uninstall'
		
# Remove OneNote
Write-Host "Remove OneNote"
try {
	get-appxpackage *onenote* | remove-appxpackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing OneNote : $_.Exception.Message"
}
		
# Remove Skype Preview
Write-Host "Remove Skype Preview"
try {
	get-appxpackage *skypeapp* | remove-appxpackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing Skype Preview : $_.Exception.Message"
}
		
# Remove Xbox
Write-Host "Remove Xbox"
try {
	Get-AppxPackage *xboxapp* | Remove-AppxPackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing Xbox (app) : $_.Exception.Message"
}
try {
	Get-AppxPackage *xboxspeech* | Remove-AppxPackage
	Write-Host "Success"
}
catch [System.Exception] {
	Write-Host "Failure"
	Write-Host "Exception caught in removing Xbox (speech) : $_.Exception.Message"
}

.

.

11. Configure Edge

Remove Edge Welcome Screen and Disable Prompt for Default Browser.

Using PSADT:

 

# Remove Edge Welcome Screen and disable the prompt to make it the default browser
Write-Log "Remove Edge Welcome Screen and disable the prompt to make it the default browser"
Write-Log "Add HKCU registry for all existing profiles + default user"
[scriptblock]$HKCURegistrySettings = {
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\FirstRun' -Name 'LastFirstRunVersionDelivered' -value '1' -Type DWORD -SID $UserProfile.SID
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\Main' -Name 'IE10TourShown' -value '1' -Type DWORD -SID $UserProfile.SID
	Set-RegistryKey -Key 'HKCU:SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\Main' -Name 'DisallowDefaultBrowserPrompt' -value '1' -Type DWORD -SID $UserProfile.SID
}
Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

.

Using Registry:

 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\FirstRun]
"LastFirstRunVersionDelivered"=dword:00000001

[HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\Main]
"IE10TourShown"=dword:00000001
"DisallowDefaultBrowserPrompt"=dword:00000001 

.

.

12. Add “Run as Different User” in Context Menu

Registry

 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer]
"ShowRunasDifferentuserinStart"=dword:00000001 

.

.

13. Turn Off “Microsoft Consumer Experience”

Registry

 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CloudContent]
"DisableWindowsConsumerFeatures"=dword:00000001

.

.

14. Disable “File Explorer Suggestion”

Registry

 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"ShowSyncProviderNotifications"=dword:00000000