-
-
Save Kif11/2726e03f008998f90b62151779fd4b4a to your computer and use it in GitHub Desktop.
This Windows 10 Setup Script turns off a bunch of unnecessary Windows 10 telemetery, bloatware, & privacy things. Not guaranteed to catch everything. Review and tweak before running. Reboot after running. Scripts for reversing are included and commented. Fork of https://github.com/Disassembler0/Win10-Initial-Setup-Script (different defaults). N.…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Default preset | |
$tweaks = @( | |
### Require administrator privileges ### | |
"RequireAdmin", | |
### Privacy Tweaks ### | |
"DisableTelemetry", | |
"DisableWiFiSense", | |
"DisableSmartScreen", | |
"DisableWebSearch", | |
"DisableAppSuggestions", | |
"DisableActivityHistory", | |
"DisableBackgroundApps", | |
"DisableLocationTracking", # "EnableLocationTracking", | |
"DisableMapUpdates", # "EnableMapUpdates", | |
"DisableFeedback", # "EnableFeedback", | |
"DisableTailoredExperiences", # "EnableTailoredExperiences", | |
"DisableAdvertisingID", # "EnableAdvertisingID", | |
"DisableCortana", # "EnableCortana", | |
"DisableErrorReporting", # "EnableErrorReporting", | |
"SetP2PUpdateLocal", # "SetP2PUpdateInternet", | |
"DisableDiagTrack", # "EnableDiagTrack", | |
"DisableWAPPush", # "EnableWAPPush", | |
"UninstallMsftBloat", | |
"DisableXboxFeatures", | |
"DisableAdobeFlash", | |
"UninstallMediaPlayer", | |
"UninstallInternetExplorer", | |
"UninstallWorkFolders", | |
"RemoveFaxPrinter", | |
"Hide3DObjectsFromThisPC", | |
"Hide3DObjectsFromExplorer", | |
"DisableLockScreen", | |
"DisableStickyKeys", | |
"DisableUpdateRestart", | |
"DisableSharedExperiences", | |
"DisableRemoteAssistance", | |
"DisableRemoteDesktop", | |
"DisableAutoplay", | |
"DisableAutorun", | |
"DisableDefragmentation", | |
"DisableSuperfetch", | |
"DisableIndexing", | |
"WaitForKey" | |
) | |
########## | |
# Auxiliary Functions | |
########## | |
Function RequireAdmin { | |
If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) { | |
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" $PSCommandArgs" -WorkingDirectory $pwd -Verb RunAs | |
Exit | |
} | |
} | |
# Wait for key press | |
Function WaitForKey { | |
Write-Output "`nPress any key to continue..." | |
[Console]::ReadKey($true) | Out-Null | |
} | |
########## | |
# Privacy Tweaks | |
########## | |
# Disable Telemetry | |
# Note: This tweak may cause Enterprise edition to stop receiving Windows updates. | |
# Windows Update control panel will then show message "Your device is at risk because it's out of date and missing important security and quality updates. Let's get you back on track so Windows can run more securely. Select this button to get going". | |
# In such case, enable telemetry, run Windows update and then disable telemetry again. See also https://github.com/Disassembler0/Win10-Initial-Setup-Script/issues/57 | |
Function DisableTelemetry { | |
Write-Output "Disabling Telemetry..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0 | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Application Experience\ProgramDataUpdater" | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Autochk\Proxy" | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Customer Experience Improvement Program\Consolidator" | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Customer Experience Improvement Program\UsbCeip" | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector" | Out-Null | |
} | |
# Enable Telemetry | |
Function EnableTelemetry { | |
Write-Output "Enabling Telemetry..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 3 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 3 | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -ErrorAction SilentlyContinue | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Application Experience\ProgramDataUpdater" | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Autochk\Proxy" | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Customer Experience Improvement Program\Consolidator" | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Customer Experience Improvement Program\UsbCeip" | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector" | Out-Null | |
} | |
# Disable Wi-Fi Sense | |
Function DisableWiFiSense { | |
Write-Output "Disabling Wi-Fi Sense..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting" -Name "Value" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots" -Name "Value" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" -Name "AutoConnectAllowedOEM" -Type Dword -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" -Name "WiFISenseAllowed" -Type Dword -Value 0 | |
} | |
# Enable Wi-Fi Sense | |
Function EnableWiFiSense { | |
Write-Output "Enabling Wi-Fi Sense..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowWiFiHotSpotReporting" -Name "Value" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\WiFi\AllowAutoConnectToWiFiSenseHotspots" -Name "Value" -Type DWord -Value 1 | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" -Name "AutoConnectAllowedOEM" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" -Name "WiFISenseAllowed" -ErrorAction SilentlyContinue | |
} | |
# Disable SmartScreen Filter | |
Function DisableSmartScreen { | |
Write-Output "Disabling SmartScreen Filter..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableSmartScreen" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter" -Name "EnabledV9" -Type DWord -Value 0 | |
} | |
# Enable SmartScreen Filter | |
Function EnableSmartScreen { | |
Write-Output "Enabling SmartScreen Filter..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableSmartScreen" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter" -Name "EnabledV9" -ErrorAction SilentlyContinue | |
} | |
# Disable Web Search in Start Menu | |
Function DisableWebSearch { | |
Write-Output "Disabling Bing Search in Start Menu..." | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" -Name "BingSearchEnabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" -Name "CortanaConsent" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "DisableWebSearch" -Type DWord -Value 1 | |
} | |
# Enable Web Search in Start Menu | |
Function EnableWebSearch { | |
Write-Output "Enabling Bing Search in Start Menu..." | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" -Name "BingSearchEnabled" -ErrorAction SilentlyContinue | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" -Name "CortanaConsent" -Type DWord -Value 1 | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "DisableWebSearch" -ErrorAction SilentlyContinue | |
} | |
# Disable Application suggestions and automatic installation | |
Function DisableAppSuggestions { | |
Write-Output "Disabling Application suggestions..." | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "ContentDeliveryAllowed" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "OemPreInstalledAppsEnabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEnabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEverEnabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SilentInstalledAppsEnabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338387Enabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338389Enabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-353698Enabled" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SystemPaneSuggestionsEnabled" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -Type DWord -Value 1 | |
} | |
# Enable Application suggestions and automatic installation | |
Function EnableAppSuggestions { | |
Write-Output "Enabling Application suggestions..." | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "ContentDeliveryAllowed" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "OemPreInstalledAppsEnabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEnabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "PreInstalledAppsEverEnabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SilentInstalledAppsEnabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338389Enabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SystemPaneSuggestionsEnabled" -Type DWord -Value 1 | |
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338387Enabled" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-353698Enabled" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -ErrorAction SilentlyContinue | |
} | |
# Disable Activity History feed in Task View - Note: The checkbox "Let Windows collect my activities from this PC" remains checked even when the function is disabled | |
Function DisableActivityHistory { | |
Write-Output "Disabling Activity History..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableActivityFeed" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "PublishUserActivities" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "UploadUserActivities" -Type DWord -Value 0 | |
} | |
# Enable Activity History feed in Task View | |
Function EnableActivityHistory { | |
Write-Output "Enabling Activity History..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableActivityFeed" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "PublishUserActivities" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "UploadUserActivities" -ErrorAction SilentlyContinue | |
} | |
# Disable Background application access - ie. if apps can download or update when they aren't used - Cortana is excluded as its inclusion breaks start menu search | |
Function DisableBackgroundApps { | |
Write-Output "Disabling Background application access..." | |
Get-ChildItem -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications" -Exclude "Microsoft.Windows.Cortana*" | ForEach { | |
Set-ItemProperty -Path $_.PsPath -Name "Disabled" -Type DWord -Value 1 | |
Set-ItemProperty -Path $_.PsPath -Name "DisabledByUser" -Type DWord -Value 1 | |
} | |
} | |
# Enable Background application access | |
Function EnableBackgroundApps { | |
Write-Output "Enabling Background application access..." | |
Get-ChildItem -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications" | ForEach { | |
Remove-ItemProperty -Path $_.PsPath -Name "Disabled" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path $_.PsPath -Name "DisabledByUser" -ErrorAction SilentlyContinue | |
} | |
} | |
# Disable Location Tracking | |
Function DisableLocationTracking { | |
Write-Output "Disabling Location Tracking..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Name "Value" -Type String -Value "Deny" | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}" -Name "SensorPermissionState" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" -Name "Status" -Type DWord -Value 0 | |
} | |
# Enable Location Tracking | |
Function EnableLocationTracking { | |
Write-Output "Enabling Location Tracking..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" -Name "Value" -Type String -Value "Allow" | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Sensor\Overrides\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}" -Name "SensorPermissionState" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\lfsvc\Service\Configuration" -Name "Status" -Type DWord -Value 1 | |
} | |
# Disable automatic Maps updates | |
Function DisableMapUpdates { | |
Write-Output "Disabling automatic Maps updates..." | |
Set-ItemProperty -Path "HKLM:\SYSTEM\Maps" -Name "AutoUpdateEnabled" -Type DWord -Value 0 | |
} | |
# Enable automatic Maps updates | |
Function EnableMapUpdates { | |
Write-Output "Enable automatic Maps updates..." | |
Remove-ItemProperty -Path "HKLM:\SYSTEM\Maps" -Name "AutoUpdateEnabled" -ErrorAction SilentlyContinue | |
} | |
# Disable Feedback | |
Function DisableFeedback { | |
Write-Output "Disabling Feedback..." | |
If (!(Test-Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules")) { | |
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" -Name "NumberOfSIUFInPeriod" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "DoNotShowFeedbackNotifications" -Type DWord -Value 1 | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Feedback\Siuf\DmClient" -ErrorAction SilentlyContinue | Out-Null | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Feedback\Siuf\DmClientOnScenarioDownload" -ErrorAction SilentlyContinue | Out-Null | |
} | |
# Enable Feedback | |
Function EnableFeedback { | |
Write-Output "Enabling Feedback..." | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" -Name "NumberOfSIUFInPeriod" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "DoNotShowFeedbackNotifications" -ErrorAction SilentlyContinue | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Feedback\Siuf\DmClient" -ErrorAction SilentlyContinue | Out-Null | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Feedback\Siuf\DmClientOnScenarioDownload" -ErrorAction SilentlyContinue | Out-Null | |
} | |
# Disable Tailored Experiences | |
Function DisableTailoredExperiences { | |
Write-Output "Disabling Tailored Experiences..." | |
If (!(Test-Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent")) { | |
New-Item -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableTailoredExperiencesWithDiagnosticData" -Type DWord -Value 1 | |
} | |
# Enable Tailored Experiences | |
Function EnableTailoredExperiences { | |
Write-Output "Enabling Tailored Experiences..." | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableTailoredExperiencesWithDiagnosticData" -ErrorAction SilentlyContinue | |
} | |
# Disable Advertising ID | |
Function DisableAdvertisingID { | |
Write-Output "Disabling Advertising ID..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" -Name "DisabledByGroupPolicy" -Type DWord -Value 1 | |
} | |
# Enable Advertising ID | |
Function EnableAdvertisingID { | |
Write-Output "Enabling Advertising ID..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" -Name "DisabledByGroupPolicy" -ErrorAction SilentlyContinue | |
} | |
# Disable Cortana | |
Function DisableCortana { | |
Write-Output "Disabling Cortana..." | |
If (!(Test-Path "HKCU:\SOFTWARE\Microsoft\Personalization\Settings")) { | |
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Personalization\Settings" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Personalization\Settings" -Name "AcceptedPrivacyPolicy" -Type DWord -Value 0 | |
If (!(Test-Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization")) { | |
New-Item -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization" -Name "RestrictImplicitTextCollection" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization" -Name "RestrictImplicitInkCollection" -Type DWord -Value 1 | |
If (!(Test-Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore")) { | |
New-Item -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore" -Name "HarvestContacts" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -Type DWord -Value 0 | |
} | |
# Enable Cortana | |
Function EnableCortana { | |
Write-Output "Enabling Cortana..." | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Personalization\Settings" -Name "AcceptedPrivacyPolicy" -ErrorAction SilentlyContinue | |
If (!(Test-Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore")) { | |
New-Item -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization" -Name "RestrictImplicitTextCollection" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization" -Name "RestrictImplicitInkCollection" -Type DWord -Value 0 | |
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore" -Name "HarvestContacts" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -ErrorAction SilentlyContinue | |
} | |
# Disable Error reporting | |
Function DisableErrorReporting { | |
Write-Output "Disabling Error reporting..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name "Disabled" -Type DWord -Value 1 | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Windows Error Reporting\QueueReporting" | Out-Null | |
} | |
# Enable Error reporting | |
Function EnableErrorReporting { | |
Write-Output "Enabling Error reporting..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name "Disabled" -ErrorAction SilentlyContinue | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Windows Error Reporting\QueueReporting" | Out-Null | |
} | |
# Restrict Windows Update P2P only to local network - Needed only for 1507 as local P2P is the default since 1511 | |
Function SetP2PUpdateLocal { | |
Write-Output "Restricting Windows Update P2P only to local network..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 1 | |
} | |
# Unrestrict Windows Update P2P | |
Function SetP2PUpdateInternet { | |
Write-Output "Unrestricting Windows Update P2P to internet..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -ErrorAction SilentlyContinue | |
} | |
# Stop and disable Diagnostics Tracking Service | |
Function DisableDiagTrack { | |
Write-Output "Stopping and disabling Diagnostics Tracking Service..." | |
Stop-Service "DiagTrack" -WarningAction SilentlyContinue | |
Set-Service "DiagTrack" -StartupType Disabled | |
} | |
# Enable and start Diagnostics Tracking Service | |
Function EnableDiagTrack { | |
Write-Output "Enabling and starting Diagnostics Tracking Service..." | |
Set-Service "DiagTrack" -StartupType Automatic | |
Start-Service "DiagTrack" -WarningAction SilentlyContinue | |
} | |
# Stop and disable WAP Push Service | |
Function DisableWAPPush { | |
Write-Output "Stopping and disabling WAP Push Service..." | |
Stop-Service "dmwappushservice" -WarningAction SilentlyContinue | |
Set-Service "dmwappushservice" -StartupType Disabled | |
} | |
# Enable and start WAP Push Service | |
Function EnableWAPPush { | |
Write-Output "Enabling and starting WAP Push Service..." | |
Set-Service "dmwappushservice" -StartupType Automatic | |
Start-Service "dmwappushservice" -WarningAction SilentlyContinue | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\dmwappushservice" -Name "DelayedAutoStart" -Type DWord -Value 1 | |
} | |
# Uninstall default Microsoft applications | |
Function UninstallMsftBloat { | |
Write-Output "Uninstalling default Microsoft applications..." | |
Get-AppxPackage "Microsoft.3DBuilder" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.AppConnector" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.BingFinance" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.BingNews" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.BingSports" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.BingTranslator" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.BingWeather" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.CommsPhone" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.ConnectivityStore" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.GetHelp" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Getstarted" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Messaging" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Microsoft3DViewer" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MicrosoftOfficeHub" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MicrosoftPowerBIForWindows" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MicrosoftSolitaireCollection" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MicrosoftStickyNotes" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MinecraftUWP" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.MSPaint" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.NetworkSpeedTest" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Office.OneNote" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Office.Sway" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.OneConnect" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.People" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Print3D" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.RemoteDesktop" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.SkypeApp" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Wallet" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsAlarms" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsCamera" | Remove-AppxPackage | |
Get-AppxPackage "microsoft.windowscommunicationsapps" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsFeedbackHub" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsMaps" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsPhone" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Windows.Photos" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.WindowsSoundRecorder" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.ZuneMusic" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.ZuneVideo" | Remove-AppxPackage | |
} | |
# Install default Microsoft applications | |
Function InstallMsftBloat { | |
Write-Output "Installing default Microsoft applications..." | |
Get-AppxPackage -AllUsers "Microsoft.3DBuilder" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.AppConnector" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.BingFinance" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.BingNews" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.BingSports" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.BingTranslator" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.BingWeather" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.CommsPhone" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.ConnectivityStore" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.GetHelp" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Getstarted" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Messaging" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Microsoft3DViewer" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MicrosoftOfficeHub" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MicrosoftPowerBIForWindows" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MicrosoftSolitaireCollection" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MicrosoftStickyNotes" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MinecraftUWP" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.MSPaint" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.NetworkSpeedTest" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Office.OneNote" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Office.Sway" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.OneConnect" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.People" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Print3D" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.RemoteDesktop" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.SkypeApp" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Wallet" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsAlarms" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsCamera" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.windowscommunicationsapps" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsFeedbackHub" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsMaps" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsPhone" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Windows.Photos" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.WindowsSoundRecorder" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.ZuneMusic" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.ZuneVideo" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
} | |
# In case you have removed them for good, you can try to restore the files using installation medium as follows | |
# New-Item C:\Mnt -Type Directory | Out-Null | |
# dism /Mount-Image /ImageFile:D:\sources\install.wim /index:1 /ReadOnly /MountDir:C:\Mnt | |
# robocopy /S /SEC /R:0 "C:\Mnt\Program Files\WindowsApps" "C:\Program Files\WindowsApps" | |
# dism /Unmount-Image /Discard /MountDir:C:\Mnt | |
# Remove-Item -Path C:\Mnt -Recurse | |
# Disable Xbox features | |
Function DisableXboxFeatures { | |
Write-Output "Disabling Xbox features..." | |
Get-AppxPackage "Microsoft.XboxApp" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.XboxIdentityProvider" | Remove-AppxPackage -ErrorAction SilentlyContinue | |
Get-AppxPackage "Microsoft.XboxSpeechToTextOverlay" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.XboxGameOverlay" | Remove-AppxPackage | |
Get-AppxPackage "Microsoft.Xbox.TCUI" | Remove-AppxPackage | |
Set-ItemProperty -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Type DWord -Value 0 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" -Name "AllowGameDVR" -Type DWord -Value 0 | |
} | |
# Enable Xbox features | |
Function EnableXboxFeatures { | |
Write-Output "Enabling Xbox features..." | |
Get-AppxPackage -AllUsers "Microsoft.XboxApp" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.XboxIdentityProvider" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.XboxSpeechToTextOverlay" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.XboxGameOverlay" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Get-AppxPackage -AllUsers "Microsoft.Xbox.TCUI" | ForEach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"} | |
Set-ItemProperty -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Type DWord -Value 1 | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" -Name "AllowGameDVR" -ErrorAction SilentlyContinue | |
} | |
# Disable built-in Adobe Flash in IE and Edge | |
Function DisableAdobeFlash { | |
Write-Output "Disabling built-in Adobe Flash in IE and Edge..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Internet Explorer")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Internet Explorer" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Internet Explorer" -Name "DisableFlashInIE" -Type DWord -Value 1 | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Addons")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Addons" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Addons" -Name "FlashPlayerEnabled" -Type DWord -Value 0 | |
} | |
# Enable built-in Adobe Flash in IE and Edge | |
Function EnableAdobeFlash { | |
Write-Output "Enabling built-in Adobe Flash in IE and Edge..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Internet Explorer" -Name "DisableFlashInIE" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Addons" -Name "FlashPlayerEnabled" -ErrorAction SilentlyContinue | |
} | |
# Uninstall Windows Media Player | |
Function UninstallMediaPlayer { | |
Write-Output "Uninstalling Windows Media Player..." | |
Disable-WindowsOptionalFeature -Online -FeatureName "WindowsMediaPlayer" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Install Windows Media Player | |
Function InstallMediaPlayer { | |
Write-Output "Installing Windows Media Player..." | |
Enable-WindowsOptionalFeature -Online -FeatureName "WindowsMediaPlayer" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Uninstall Internet Explorer | |
Function UninstallInternetExplorer { | |
Write-Output "Uninstalling Internet Explorer..." | |
Disable-WindowsOptionalFeature -Online -FeatureName "Internet-Explorer-Optional-$env:PROCESSOR_ARCHITECTURE" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Install Internet Explorer | |
Function InstallInternetExplorer { | |
Write-Output "Installing Internet Explorer..." | |
Enable-WindowsOptionalFeature -Online -FeatureName "Internet-Explorer-Optional-$env:PROCESSOR_ARCHITECTURE" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Uninstall Work Folders Client - Not applicable to Server | |
Function UninstallWorkFolders { | |
Write-Output "Uninstalling Work Folders Client..." | |
Disable-WindowsOptionalFeature -Online -FeatureName "WorkFolders-Client" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Install Work Folders Client - Not applicable to Server | |
Function InstallWorkFolders { | |
Write-Output "Installing Work Folders Client..." | |
Enable-WindowsOptionalFeature -Online -FeatureName "WorkFolders-Client" -NoRestart -WarningAction SilentlyContinue | Out-Null | |
} | |
# Remove Default Fax Printer | |
Function RemoveFaxPrinter { | |
Write-Output "Removing Default Fax Printer..." | |
Remove-Printer -Name "Fax" -ErrorAction SilentlyContinue | |
} | |
# Add Default Fax Printer | |
Function AddFaxPrinter { | |
Write-Output "Adding Default Fax Printer..." | |
Add-Printer -Name "Fax" -DriverName "Microsoft Shared Fax Driver" -PortName "SHRFAX:" -ErrorAction SilentlyContinue | |
} | |
# Hide 3D Objects icon from This PC - The icon remains in personal folders and open/save dialogs | |
Function Hide3DObjectsFromThisPC { | |
Write-Output "Hiding 3D Objects icon from This PC..." | |
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}" -Recurse -ErrorAction SilentlyContinue | |
} | |
# Show 3D Objects icon in This PC | |
Function Show3DObjectsInThisPC { | |
Write-Output "Showing 3D Objects icon in This PC..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}" | Out-Null | |
} | |
} | |
# Hide 3D Objects icon from Explorer namespace - Hides the icon also from personal folders and open/save dialogs | |
Function Hide3DObjectsFromExplorer { | |
Write-Output "Hiding 3D Objects icon from Explorer namespace..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name "ThisPCPolicy" -Type String -Value "Hide" | |
If (!(Test-Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag")) { | |
New-Item -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name "ThisPCPolicy" -Type String -Value "Hide" | |
} | |
# Disable Lock screen | |
Function DisableLockScreen { | |
Write-Output "Disabling Lock screen..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" -Name "NoLockScreen" -Type DWord -Value 1 | |
} | |
# Enable Lock screen | |
Function EnableLockScreen { | |
Write-Output "Enabling Lock screen..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" -Name "NoLockScreen" -ErrorAction SilentlyContinue | |
} | |
# Show 3D Objects icon in Explorer namespace | |
Function Show3DObjectsInExplorer { | |
Write-Output "Showing 3D Objects icon in Explorer namespace..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name "ThisPCPolicy" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name "ThisPCPolicy" -ErrorAction SilentlyContinue | |
} | |
# Disable Sticky keys prompt | |
Function DisableStickyKeys { | |
Write-Output "Disabling Sticky keys prompt..." | |
Set-ItemProperty -Path "HKCU:\Control Panel\Accessibility\StickyKeys" -Name "Flags" -Type String -Value "506" | |
} | |
# Enable Sticky keys prompt | |
Function EnableStickyKeys { | |
Write-Output "Enabling Sticky keys prompt..." | |
Set-ItemProperty -Path "HKCU:\Control Panel\Accessibility\StickyKeys" -Name "Flags" -Type String -Value "510" | |
} | |
# Disable Windows Update automatic restart | |
# Note: This doesn't disable the need for the restart but rather tries to ensure that the restart doesn't happen in the least expected moment. Allow the machine to restart as soon as possible anyway. | |
Function DisableUpdateRestart { | |
Write-Output "Disabling Windows Update automatic restart..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU")) { | |
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -Type DWord -Value 0 | |
} | |
# Enable Windows Update automatic restart | |
Function EnableUpdateRestart { | |
Write-Output "Enabling Windows Update automatic restart..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -ErrorAction SilentlyContinue | |
} | |
# Disable Shared Experiences - Not applicable to Server | |
Function DisableSharedExperiences { | |
Write-Output "Disabling Shared Experiences..." | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableCdp" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableMmx" -Type DWord -Value 0 | |
} | |
# Enable Shared Experiences - Not applicable to Server | |
Function EnableSharedExperiences { | |
Write-Output "Enabling Shared Experiences..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableCdp" -ErrorAction SilentlyContinue | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableMmx" -ErrorAction SilentlyContinue | |
} | |
# Disable Remote Assistance - Not applicable to Server (unless Remote Assistance is explicitly installed) | |
Function DisableRemoteAssistance { | |
Write-Output "Disabling Remote Assistance..." | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Remote Assistance" -Name "fAllowToGetHelp" -Type DWord -Value 0 | |
} | |
# Enable Remote Assistance - Not applicable to Server (unless Remote Assistance is explicitly installed) | |
Function EnableRemoteAssistance { | |
Write-Output "Enabling Remote Assistance..." | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Remote Assistance" -Name "fAllowToGetHelp" -Type DWord -Value 1 | |
} | |
# Disable Remote Desktop | |
Function DisableRemoteDesktop { | |
Write-Output "Disabling Remote Desktop..." | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Type DWord -Value 1 | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Type DWord -Value 1 | |
Disable-NetFirewallRule -Name "RemoteDesktop*" | |
} | |
# Enable Remote Desktop w/o Network Level Authentication | |
Function EnableRemoteDesktop { | |
Write-Output "Enabling Remote Desktop w/o Network Level Authentication..." | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Type DWord -Value 0 | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Type DWord -Value 0 | |
Enable-NetFirewallRule -Name "RemoteDesktop*" | |
} | |
# Disable Autoplay | |
Function DisableAutoplay { | |
Write-Output "Disabling Autoplay..." | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers" -Name "DisableAutoplay" -Type DWord -Value 1 | |
} | |
# Enable Autoplay | |
Function EnableAutoplay { | |
Write-Output "Enabling Autoplay..." | |
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers" -Name "DisableAutoplay" -Type DWord -Value 0 | |
} | |
# Disable Autorun for all drives | |
Function DisableAutorun { | |
Write-Output "Disabling Autorun for all drives..." | |
If (!(Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer")) { | |
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" | Out-Null | |
} | |
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "NoDriveTypeAutoRun" -Type DWord -Value 255 | |
} | |
# Enable Autorun for removable drives | |
Function EnableAutorun { | |
Write-Output "Enabling Autorun for all drives..." | |
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "NoDriveTypeAutoRun" -ErrorAction SilentlyContinue | |
} | |
# Disable scheduled defragmentation task | |
Function DisableDefragmentation { | |
Write-Output "Disabling scheduled defragmentation..." | |
Disable-ScheduledTask -TaskName "Microsoft\Windows\Defrag\ScheduledDefrag" | Out-Null | |
} | |
# Enable scheduled defragmentation task | |
Function EnableDefragmentation { | |
Write-Output "Enabling scheduled defragmentation..." | |
Enable-ScheduledTask -TaskName "Microsoft\Windows\Defrag\ScheduledDefrag" | Out-Null | |
} | |
# Stop and disable Superfetch service - Not applicable to Server | |
Function DisableSuperfetch { | |
Write-Output "Stopping and disabling Superfetch service..." | |
Stop-Service "SysMain" -WarningAction SilentlyContinue | |
Set-Service "SysMain" -StartupType Disabled | |
} | |
# Start and enable Superfetch service - Not applicable to Server | |
Function EnableSuperfetch { | |
Write-Output "Starting and enabling Superfetch service..." | |
Set-Service "SysMain" -StartupType Automatic | |
Start-Service "SysMain" -WarningAction SilentlyContinue | |
} | |
# Stop and disable Windows Search indexing service | |
Function DisableIndexing { | |
Write-Output "Stopping and disabling Windows Search indexing service..." | |
Stop-Service "WSearch" -WarningAction SilentlyContinue | |
Set-Service "WSearch" -StartupType Disabled | |
} | |
# Start and enable Windows Search indexing service | |
Function EnableIndexing { | |
Write-Output "Starting and enabling Windows Search indexing service..." | |
Set-Service "WSearch" -StartupType Automatic | |
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WSearch" -Name "DelayedAutoStart" -Type DWord -Value 1 | |
Start-Service "WSearch" -WarningAction SilentlyContinue | |
} | |
########## | |
# Parse parameters and apply tweaks | |
########## | |
# Normalize path to preset file | |
$preset = "" | |
$PSCommandArgs = $args | |
If ($args -And $args[0].ToLower() -eq "-preset") { | |
$preset = Resolve-Path $($args | Select-Object -Skip 1) | |
$PSCommandArgs = "-preset `"$preset`"" | |
} | |
# Load function names from command line arguments or a preset file | |
If ($args) { | |
$tweaks = $args | |
If ($preset) { | |
$tweaks = Get-Content $preset -ErrorAction Stop | ForEach { $_.Trim() } | Where { $_ -ne "" -and $_[0] -ne "#" } | |
} | |
} | |
# Call the desired tweak functions | |
$tweaks | ForEach { Invoke-Expression $_ } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment