Last active
March 3, 2026 22:49
-
-
Save twobob/d3a06bf13635a8e5299cdcf4c0ff8384 to your computer and use it in GitHub Desktop.
# Disable Telemetry Scheduled Tasks # Run as Administrator
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
| <# | |
| .SYNOPSIS | |
| Comprehensive Telemetry, AI, and Diagnostic Task Disabler. | |
| .DESCRIPTION | |
| Combines explicit path targeting with wildcard discovery to ensure | |
| all data collection and background management tasks are neutralized. | |
| Run as Administrator. | |
| #> | |
| # 1. Explicitly Defined Targets (The "Known Offenders") | |
| $tasks = @( | |
| # Application Experience (Telemetry) | |
| @{ Path = "\Microsoft\Windows\Application Experience\"; Name = "Microsoft Compatibility Appraiser" }, | |
| @{ Path = "\Microsoft\Windows\Application Experience\"; Name = "ProgramDataUpdater" }, | |
| @{ Path = "\Microsoft\Windows\Application Experience\"; Name = "StartupAppScan" }, | |
| # Customer Experience (CEIP) | |
| @{ Path = "\Microsoft\Windows\Customer Experience Improvement Program\"; Name = "Consolidator" }, | |
| @{ Path = "\Microsoft\Windows\Customer Experience Improvement Program\"; Name = "UsbCeip" }, | |
| # Windows AI / Recall / Copilot | |
| @{ Path = "\Microsoft\Windows\WindowsAI\"; Name = "Recall" }, | |
| @{ Path = "\Microsoft\Windows\WindowsAI\"; Name = "Copilot" }, | |
| @{ Path = "\Microsoft\Windows\Windows AI\"; Name = "AITask" }, | |
| # Speech & Input | |
| @{ Path = "\Microsoft\Windows\Speech\"; Name = "SpeechModelDownloadTask" }, | |
| @{ Path = "\Microsoft\Windows\TextServicesFramework\"; Name = "MsCtfMonitor" }, | |
| # Error Reporting & Diagnostics | |
| @{ Path = "\Microsoft\Windows\Windows Error Reporting\"; Name = "QueueReporting" }, | |
| @{ Path = "\Microsoft\Windows\Autochk\"; Name = "Proxy" }, | |
| @{ Path = "\Microsoft\Windows\DiskDiagnostic\"; Name = "Microsoft-Windows-DiskDiagnosticDataCollector" }, | |
| # Energy & Device Management (The "Silent" Uploaders) | |
| @{ Path = "\Microsoft\Windows\Energy\"; Name = "PowerEfficiencyDiagnosticUserLog" }, | |
| @{ Path = "\Microsoft\Windows\Device Management\"; Name = "Dmvsc" }, | |
| # Maps & Xbox | |
| @{ Path = "\Microsoft\Windows\Maps\"; Name = "MapsUpdateTask" }, | |
| @{ Path = "\Microsoft\Windows\Maps\"; Name = "MapsToastTask" }, | |
| @{ Path = "\Microsoft\Windows\XblGameSave\"; Name = "XblGameSaveTask" } | |
| ) | |
| Write-Host "--- Disabling Explicitly Targeted Tasks ---" -ForegroundColor Cyan | |
| foreach ($t in $tasks) { | |
| $fullPath = $t.Path + $t.Name | |
| try { | |
| $task = Get-ScheduledTask -TaskPath $t.Path -TaskName $t.Name -ErrorAction Stop | |
| if ($task.State -ne "Disabled") { | |
| Disable-ScheduledTask -TaskPath $t.Path -TaskName $t.Name | Out-Null | |
| Write-Host "[DISABLED] $fullPath" -ForegroundColor Green | |
| } else { | |
| Write-Host "[ALREADY DISABLED] $fullPath" -ForegroundColor DarkGray | |
| } | |
| } | |
| catch { | |
| Write-Host "[NOT FOUND] $fullPath (skipped)" -ForegroundColor DarkGray | |
| } | |
| } | |
| # 2. Wildcard Search (Catches SQM and dynamically named AI tasks) | |
| Write-Host "`n--- Scanning for Wildcard Matches (*Sqm*, *Telemetry*, *Experience*) ---" -ForegroundColor Cyan | |
| $keywords = @("*Sqm*", "*Telemetry*", "*Experience*", "*Survey*") | |
| foreach ($key in $keywords) { | |
| $foundTasks = Get-ScheduledTask -TaskName $key -ErrorAction SilentlyContinue | |
| foreach ($ft in $foundTasks) { | |
| if ($ft.State -ne "Disabled") { | |
| Disable-ScheduledTask -TaskName $ft.TaskName -TaskPath $ft.TaskPath | Out-Null | |
| Write-Host "[WILDCARD DISABLE] $($ft.TaskPath)$($ft.TaskName)" -ForegroundColor Yellow | |
| } | |
| } | |
| } | |
| Write-Host "`nHardening complete. System is now significantly quieter." -ForegroundColor Green |
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
| #Requires -RunAsAdministrator | |
| <# | |
| .SYNOPSIS | |
| Disables Windows telemetry, AI workload, and bloat services. | |
| .DESCRIPTION | |
| Sets targeted services to Disabled and stops them if running. | |
| High-risk services (likely to be re-enabled by Windows updates) also | |
| receive a direct registry write (Start = 4) as a second line of defence. | |
| All changes are reversible: | |
| Set-Service -Name <ServiceName> -StartupType Manual | |
| Start-Service -Name <ServiceName> | |
| .NOTES | |
| Tested on Windows 11 24H2. | |
| Run in PowerShell as Administrator. | |
| After major Windows updates, re-run to catch re-enabled services. | |
| .LINK | |
| https://gist.github.com | |
| #> | |
| # ------------------------------------------------------------------------- | |
| # Service definitions | |
| # Format: Name, Reason, and optionally HardenRegistry = $true for services | |
| # known to be resurrected by Windows updates. | |
| # ------------------------------------------------------------------------- | |
| $services = @( | |
| # --- Core Telemetry --- | |
| @{ Name = "DiagTrack"; HardenRegistry = $true; | |
| Reason = "Connected User Experiences & Telemetry - primary phone-home service" }, | |
| @{ Name = "dmwappushservice"; HardenRegistry = $true; | |
| Reason = "WAP push routing, feeds DiagTrack" }, | |
| @{ Name = "diagsvc"; Reason = "Diagnostic execution service" }, | |
| @{ Name = "WdiServiceHost"; Reason = "Diagnostic Service Host" }, | |
| @{ Name = "WdiSystemHost"; Reason = "Diagnostic System Host" }, | |
| @{ Name = "DPS"; Reason = "Diagnostic Policy Service" }, | |
| # --- Windows AI Fabric --- | |
| # Introduced via KB5055523 (~April 2025). Manages Recall, Copilot, | |
| # semantic search, and NPU workloads. Spawns WorkloadsSessionHost.exe | |
| # which can consume 9-15 GB RAM on 16 GB systems. | |
| @{ Name = "WSAIFabricSvc"; HardenRegistry = $true; | |
| Reason = "AI workload manager - Recall, Copilot, semantic search, NPU tasks" }, | |
| # --- Error Reporting --- | |
| @{ Name = "WerSvc"; Reason = "Windows Error Reporting" }, | |
| @{ Name = "wercplsupport"; Reason = "Problem Reports control panel support" }, | |
| @{ Name = "SDRSVC"; Reason = "Windows Backup / WER integration" }, | |
| # --- Inventory & Compatibility Telemetry --- | |
| @{ Name = "InventorySvc"; Reason = "Inventory and compatibility telemetry collector" }, | |
| @{ Name = "PcaSvc"; Reason = "Program Compatibility Assistant - reports app compat data to Microsoft" }, | |
| @{ Name = "TroubleshootingSvc"; Reason = "Recommended Troubleshooting - fetches scripts from Microsoft servers" }, | |
| # --- Remote Registry (privacy & security risk) --- | |
| @{ Name = "RemoteRegistry"; Reason = "Allows remote read/write of registry - no legitimate use on a personal PC" }, | |
| # --- Xbox / Game telemetry --- | |
| # Safe to disable if you don't use Xbox Game Pass or Xbox Live features. | |
| @{ Name = "XblAuthManager"; Reason = "Xbox Live authentication" }, | |
| @{ Name = "XblGameSave"; Reason = "Xbox Live cloud game save sync" }, | |
| @{ Name = "XboxGipSvc"; Reason = "Xbox accessory management" }, | |
| @{ Name = "XboxNetApiSvc"; Reason = "Xbox networking API" }, | |
| # --- MDM / Enterprise Push (unneeded on personal PCs) --- | |
| @{ Name = "WManSvc"; Reason = "Windows Management Service - MDM policy push" }, | |
| @{ Name = "DmEnrollmentSvc"; Reason = "Device Management Enrollment - MDM" }, | |
| # --- Miscellaneous Bloat --- | |
| @{ Name = "RetailDemo"; Reason = "Retail demo mode - no purpose on a personal machine" }, | |
| @{ Name = "wisvc"; Reason = "Windows Insider Service - telemetry uploader if enrolled, useless if not" }, | |
| @{ Name = "MapsBroker"; Reason = "Downloads map data in the background" }, | |
| @{ Name = "WMPNetworkSvc"; Reason = "Windows Media Player network sharing" } | |
| ) | |
| # ------------------------------------------------------------------------- | |
| # Registry path for hardened disables (Start = 4 = SERVICE_DISABLED) | |
| # ------------------------------------------------------------------------- | |
| $regBase = "HKLM:\SYSTEM\CurrentControlSet\Services" | |
| # ------------------------------------------------------------------------- | |
| # Main loop | |
| # ------------------------------------------------------------------------- | |
| $disabled = 0 | |
| $skipped = 0 | |
| foreach ($svc in $services) { | |
| try { | |
| $s = Get-Service -Name $svc.Name -ErrorAction Stop | |
| # Stop if running | |
| if ($s.Status -eq 'Running') { | |
| Stop-Service -Name $svc.Name -Force -ErrorAction SilentlyContinue | |
| } | |
| # Disable via SCM | |
| Set-Service -Name $svc.Name -StartupType Disabled | |
| # Optionally harden via registry | |
| if ($svc.HardenRegistry) { | |
| $regPath = "$regBase\$($svc.Name)" | |
| if (Test-Path $regPath) { | |
| Set-ItemProperty -Path $regPath -Name "Start" -Value 4 -Type DWord -Force | |
| Write-Host "[DISABLED + HARDENED] $($svc.Name)" -ForegroundColor Green | |
| } else { | |
| Write-Host "[DISABLED] $($svc.Name)" -ForegroundColor Green | |
| } | |
| } else { | |
| Write-Host "[DISABLED] $($svc.Name)" -ForegroundColor Green | |
| } | |
| Write-Host " $($svc.Reason)" -ForegroundColor DarkGray | |
| $disabled++ | |
| } | |
| catch { | |
| Write-Host "[NOT FOUND] $($svc.Name) (skipped - may not exist on this Windows version)" -ForegroundColor DarkGray | |
| $skipped++ | |
| } | |
| } | |
| # ------------------------------------------------------------------------- | |
| # Summary | |
| # ------------------------------------------------------------------------- | |
| Write-Host "" | |
| Write-Host "Complete. $disabled service(s) disabled, $skipped not found." -ForegroundColor Cyan | |
| Write-Host "To reverse any entry: Set-Service -Name <ServiceName> -StartupType Manual" -ForegroundColor Cyan | |
| Write-Host "" | |
| Write-Host "Note: Re-run after major Windows updates - some services may be re-enabled." -ForegroundColor Yellow |
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
| Open a POWERSHELL window as admin and run the following then choose y (Yoiu can change it back after if you want) | |
| Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass | |
| Execution Policy Change | |
| The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose | |
| you to the security risks described in the about_Execution_Policies help topic at | |
| https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? | |
| [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y | |
| then run the script | |
| (base) PS C:\WINDOWS\system32> C:\Users\you\Downloads\disable-tasks.ps1 | |
| [DISABLED] \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser | |
| [NOT FOUND] \Microsoft\Windows\Application Experience\ProgramDataUpdater (skipped) | |
| [DISABLED] \Microsoft\Windows\Customer Experience Improvement Program\Consolidator | |
| [DISABLED] \Microsoft\Windows\Customer Experience Improvement Program\UsbCeip | |
| [DISABLED] \Microsoft\Windows\Speech\SpeechModelDownloadTask | |
| [DISABLED] \Microsoft\Windows\Windows Error Reporting\QueueReporting | |
| [DISABLED] \Microsoft\Windows\Autochk\Proxy | |
| [NOT FOUND] \Microsoft\Windows\WindowsAI\Recall (skipped) | |
| [NOT FOUND] \Microsoft\Windows\WindowsAI\Copilot (skipped) | |
| Done. Tasks not found were skipped (may not exist on this Windows version). |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
(base) PS C:\WINDOWS\system32> C:\Users\you\Downloads\disable-services.ps1
[DISABLED + HARDENED] DiagTrack
Connected User Experiences & Telemetry - primary phone-home service
[DISABLED + HARDENED] dmwappushservice
WAP push routing, feeds DiagTrack
[DISABLED] diagsvc
Diagnostic execution service
[DISABLED] WdiServiceHost
Diagnostic Service Host
[DISABLED] WdiSystemHost
Diagnostic System Host
[DISABLED] DPS
Diagnostic Policy Service
[DISABLED + HARDENED] WSAIFabricSvc
AI workload manager - Recall, Copilot, semantic search, NPU tasks
[DISABLED] WerSvc
Windows Error Reporting
[DISABLED] wercplsupport
Problem Reports control panel support
[DISABLED] SDRSVC
Windows Backup / WER integration
[DISABLED] InventorySvc
Inventory and compatibility telemetry collector
[DISABLED] PcaSvc
Program Compatibility Assistant - reports app compat data to Microsoft
[DISABLED] TroubleshootingSvc
Recommended Troubleshooting - fetches scripts from Microsoft servers
[DISABLED] RemoteRegistry
Allows remote read/write of registry - no legitimate use on a personal PC
[DISABLED] XblAuthManager
Xbox Live authentication
[DISABLED] XblGameSave
Xbox Live cloud game save sync
[DISABLED] XboxGipSvc
Xbox accessory management
[DISABLED] XboxNetApiSvc
Xbox networking API
[DISABLED] WManSvc
Windows Management Service - MDM policy push
[DISABLED] DmEnrollmentSvc
Device Management Enrollment - MDM
[DISABLED] RetailDemo
Retail demo mode - no purpose on a personal machine
[DISABLED] wisvc
Windows Insider Service - telemetry uploader if enrolled, useless if not
[DISABLED] MapsBroker
Downloads map data in the background
[DISABLED] WMPNetworkSvc
Windows Media Player network sharing
Complete. 24 service(s) disabled, 0 not found.
To reverse any entry: Set-Service -Name -StartupType Manual
Note: Re-run after major Windows updates - some services may be re-enabled.