unbloat.ps1
· 7.7 KiB · PowerShell
Raw
# Windows 10/11 Debloat Script for Microsoft 365 Workstations
# Run as Administrator
# Create a restore point
Enable-ComputerRestore -Drive "C:\"
Checkpoint-Computer -Description "Before Debloat" -RestorePointType "MODIFY_SETTINGS"
# Function to remove Windows Apps
Function Remove-WindowsApps {
$apps = @(
# Games & Xbox
"Microsoft.Xbox.TCUI"
"Microsoft.XboxApp"
"Microsoft.XboxGameOverlay"
"Microsoft.XboxGamingOverlay"
"Microsoft.XboxIdentityProvider"
"Microsoft.XboxSpeechToTextOverlay"
"Microsoft.GamingApp"
"Microsoft.GamingServices"
"Microsoft.MicrosoftSolitaireCollection"
# Entertainment
"Microsoft.ZuneMusic"
"Microsoft.ZuneVideo"
"Microsoft.WindowsMixedReality.Portal"
"Microsoft.BingNews"
"Microsoft.GetHelp"
"Microsoft.Getstarted"
"Microsoft.WindowsFeedbackHub"
# Third-party bloatware
"king.com.CandyCrushSaga"
"king.com.FarmHeroesSaga"
"*Spotify*"
"*Disney*"
"*Netflix*"
"*Hulu*"
# Other unnecessary apps
"Microsoft.3DBuilder"
"Microsoft.Microsoft3DViewer"
"Microsoft.MixedReality.Portal"
"Microsoft.SkypeApp"
"Microsoft.WindowsAlarms"
"Microsoft.WindowsCamera"
"Microsoft.WindowsMaps"
"Microsoft.WindowsSoundRecorder"
"Microsoft.YourPhone"
"Microsoft.MicrosoftOfficeHub" # Not needed with M365 installed
"Microsoft.People"
"Microsoft.Windows.Photos"
"Microsoft.WindowsCalculator"
)
ForEach ($app in $apps) {
Write-Host "Removing: $app"
Get-AppxPackage -Name $app -AllUsers | Remove-AppxPackage -ErrorAction SilentlyContinue
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like $app | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue
}
}
# Function to disable unnecessary services
Function Disable-UnwantedServices {
$services = @(
"XblAuthManager" # Xbox Live Auth Manager
"XblGameSave" # Xbox Live Game Save
"XboxNetApiSvc" # Xbox Live Networking
"WMPNetworkSvc" # Windows Media Player Network
"RetailDemo" # Retail Demo Service
"WerSvc" # Windows Error Reporting
"wisvc" # Windows Insider Service
"lfsvc" # Geolocation Service
"MapsBroker" # Downloaded Maps Manager
"WSearch" # Windows Search (can be re-enabled if needed)
"DiagTrack" # Connected User Experiences and Telemetry
"SysMain" # Superfetch
"iphlpsvc" # IP Helper (IPv6 components)
"WbioSrvc" # Windows Biometric Service
"FontCache" # Windows Font Cache Service
"TabletInputService" # Touch Keyboard and Handwriting Panel Service
)
ForEach ($service in $services) {
Write-Host "Disabling service: $service"
Set-Service -Name $service -StartupType Disabled -ErrorAction SilentlyContinue
Stop-Service -Name $service -Force -ErrorAction SilentlyContinue
}
}
# Function to disable telemetry and other unnecessary features
Function Disable-Telemetry {
# Disable telemetry
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0
# Disable Cortana
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -Type DWord -Value 0
# Disable Consumer Features
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -Type DWord -Value 1
# Disable Suggest Apps
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Type DWord -Value 0
# Disable Advertising ID
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" -Name "Enabled" -Type DWord -Value 0
}
# Function to optimize Windows performance
Function Optimize-WindowsPerformance {
Write-Host "Optimizing system performance..."
# Disable visual effects
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" -Name "VisualFXSetting" -Type DWord -Value 2
# Disable animations
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Type String -Value "0"
# Optimize for performance
$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\AnimateMinMax"
If (!(Test-Path $path)) {
New-Item -Path $path -Force | Out-Null
}
Set-ItemProperty -Path $path -Name "Enabled" -Type DWord -Value 0
# Disable Transparency
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "EnableTransparency" -Type DWord -Value 0
# Set virtual memory (page file)
$computersys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges
$computersys.AutomaticManagedPagefile = $False
$computersys.Put()
$pagefile = Get-WmiObject -Query "Select * From Win32_PageFileSetting Where Name like '%pagefile.sys'"
$pagefile.InitialSize = 4096 # 4GB initial size
$pagefile.MaximumSize = 8192 # 8GB maximum size
$pagefile.Put()
# Disable Memory Compression
Disable-MMAgent -mc
# Disable Fast Startup
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name "HiberbootEnabled" -Type DWord -Value 0
}
# Function to disable hibernation and optimize power settings
Function Optimize-PowerSettings {
Write-Host "Optimizing power settings..."
# Disable hibernation
powercfg /hibernate off
# Set power plan to high performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
# Disable sleep
powercfg /change standby-timeout-ac 0
powercfg /change standby-timeout-dc 0
# Disable monitor timeout
powercfg /change monitor-timeout-ac 0
powercfg /change monitor-timeout-dc 0
# Disable disk timeout
powercfg /change disk-timeout-ac 0
powercfg /change disk-timeout-dc 0
# Disable hybrid sleep
powercfg /change hibernate-timeout-ac 0
powercfg /change hibernate-timeout-dc 0
}
# Function to optimize network settings
Function Optimize-NetworkSettings {
Write-Host "Optimizing network settings..."
# Disable IPv6
Disable-NetAdapterBinding -Name "*" -ComponentID "ms_tcpip6"
# Set DNS Client service to automatic
Set-Service "Dnscache" -StartupType Automatic
# Disable NetBIOS over TCP/IP
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration
foreach($adapter in $adapters) {
$adapter.SetTcpipNetbios(2)
}
# Optimize TCP/IP settings
netsh int tcp set global autotuninglevel=normal
netsh int tcp set global chimney=enabled
netsh int tcp set global dca=enabled
netsh int tcp set global netdma=enabled
}
# Main execution
Write-Host "Starting Windows Debloat and Optimization Script..."
Write-Host "Creating System Restore Point..."
# Execute functions
Remove-WindowsApps
Disable-UnwantedServices
Disable-Telemetry
Optimize-WindowsPerformance
Optimize-PowerSettings
Optimize-NetworkSettings
# Clear temp files
Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "Cleanup and optimization complete. Please restart your computer for changes to take effect."
# Optional: Force restart
# Restart-Computer -Force
1 | # Windows 10/11 Debloat Script for Microsoft 365 Workstations |
2 | # Run as Administrator |
3 | |
4 | # Create a restore point |
5 | Enable-ComputerRestore -Drive "C:\" |
6 | Checkpoint-Computer -Description "Before Debloat" -RestorePointType "MODIFY_SETTINGS" |
7 | |
8 | # Function to remove Windows Apps |
9 | Function Remove-WindowsApps { |
10 | $apps = @( |
11 | # Games & Xbox |
12 | "Microsoft.Xbox.TCUI" |
13 | "Microsoft.XboxApp" |
14 | "Microsoft.XboxGameOverlay" |
15 | "Microsoft.XboxGamingOverlay" |
16 | "Microsoft.XboxIdentityProvider" |
17 | "Microsoft.XboxSpeechToTextOverlay" |
18 | "Microsoft.GamingApp" |
19 | "Microsoft.GamingServices" |
20 | "Microsoft.MicrosoftSolitaireCollection" |
21 | |
22 | # Entertainment |
23 | "Microsoft.ZuneMusic" |
24 | "Microsoft.ZuneVideo" |
25 | "Microsoft.WindowsMixedReality.Portal" |
26 | "Microsoft.BingNews" |
27 | "Microsoft.GetHelp" |
28 | "Microsoft.Getstarted" |
29 | "Microsoft.WindowsFeedbackHub" |
30 | |
31 | # Third-party bloatware |
32 | "king.com.CandyCrushSaga" |
33 | "king.com.FarmHeroesSaga" |
34 | "*Spotify*" |
35 | "*Disney*" |
36 | "*Netflix*" |
37 | "*Hulu*" |
38 | |
39 | # Other unnecessary apps |
40 | "Microsoft.3DBuilder" |
41 | "Microsoft.Microsoft3DViewer" |
42 | "Microsoft.MixedReality.Portal" |
43 | "Microsoft.SkypeApp" |
44 | "Microsoft.WindowsAlarms" |
45 | "Microsoft.WindowsCamera" |
46 | "Microsoft.WindowsMaps" |
47 | "Microsoft.WindowsSoundRecorder" |
48 | "Microsoft.YourPhone" |
49 | "Microsoft.MicrosoftOfficeHub" # Not needed with M365 installed |
50 | "Microsoft.People" |
51 | "Microsoft.Windows.Photos" |
52 | "Microsoft.WindowsCalculator" |
53 | ) |
54 | |
55 | ForEach ($app in $apps) { |
56 | Write-Host "Removing: $app" |
57 | Get-AppxPackage -Name $app -AllUsers | Remove-AppxPackage -ErrorAction SilentlyContinue |
58 | Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like $app | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue |
59 | } |
60 | } |
61 | |
62 | # Function to disable unnecessary services |
63 | Function Disable-UnwantedServices { |
64 | $services = @( |
65 | "XblAuthManager" # Xbox Live Auth Manager |
66 | "XblGameSave" # Xbox Live Game Save |
67 | "XboxNetApiSvc" # Xbox Live Networking |
68 | "WMPNetworkSvc" # Windows Media Player Network |
69 | "RetailDemo" # Retail Demo Service |
70 | "WerSvc" # Windows Error Reporting |
71 | "wisvc" # Windows Insider Service |
72 | "lfsvc" # Geolocation Service |
73 | "MapsBroker" # Downloaded Maps Manager |
74 | "WSearch" # Windows Search (can be re-enabled if needed) |
75 | "DiagTrack" # Connected User Experiences and Telemetry |
76 | "SysMain" # Superfetch |
77 | "iphlpsvc" # IP Helper (IPv6 components) |
78 | "WbioSrvc" # Windows Biometric Service |
79 | "FontCache" # Windows Font Cache Service |
80 | "TabletInputService" # Touch Keyboard and Handwriting Panel Service |
81 | ) |
82 | |
83 | ForEach ($service in $services) { |
84 | Write-Host "Disabling service: $service" |
85 | Set-Service -Name $service -StartupType Disabled -ErrorAction SilentlyContinue |
86 | Stop-Service -Name $service -Force -ErrorAction SilentlyContinue |
87 | } |
88 | } |
89 | |
90 | # Function to disable telemetry and other unnecessary features |
91 | Function Disable-Telemetry { |
92 | # Disable telemetry |
93 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Type DWord -Value 0 |
94 | |
95 | # Disable Cortana |
96 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -Type DWord -Value 0 |
97 | |
98 | # Disable Consumer Features |
99 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -Type DWord -Value 1 |
100 | |
101 | # Disable Suggest Apps |
102 | Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Type DWord -Value 0 |
103 | |
104 | # Disable Advertising ID |
105 | Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" -Name "Enabled" -Type DWord -Value 0 |
106 | } |
107 | |
108 | # Function to optimize Windows performance |
109 | Function Optimize-WindowsPerformance { |
110 | Write-Host "Optimizing system performance..." |
111 | |
112 | # Disable visual effects |
113 | Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" -Name "VisualFXSetting" -Type DWord -Value 2 |
114 | |
115 | # Disable animations |
116 | Set-ItemProperty -Path "HKCU:\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Type String -Value "0" |
117 | |
118 | # Optimize for performance |
119 | $path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\AnimateMinMax" |
120 | If (!(Test-Path $path)) { |
121 | New-Item -Path $path -Force | Out-Null |
122 | } |
123 | Set-ItemProperty -Path $path -Name "Enabled" -Type DWord -Value 0 |
124 | |
125 | # Disable Transparency |
126 | Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "EnableTransparency" -Type DWord -Value 0 |
127 | |
128 | # Set virtual memory (page file) |
129 | $computersys = Get-WmiObject Win32_ComputerSystem -EnableAllPrivileges |
130 | $computersys.AutomaticManagedPagefile = $False |
131 | $computersys.Put() |
132 | $pagefile = Get-WmiObject -Query "Select * From Win32_PageFileSetting Where Name like '%pagefile.sys'" |
133 | $pagefile.InitialSize = 4096 # 4GB initial size |
134 | $pagefile.MaximumSize = 8192 # 8GB maximum size |
135 | $pagefile.Put() |
136 | |
137 | # Disable Memory Compression |
138 | Disable-MMAgent -mc |
139 | |
140 | # Disable Fast Startup |
141 | Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name "HiberbootEnabled" -Type DWord -Value 0 |
142 | } |
143 | |
144 | # Function to disable hibernation and optimize power settings |
145 | Function Optimize-PowerSettings { |
146 | Write-Host "Optimizing power settings..." |
147 | |
148 | # Disable hibernation |
149 | powercfg /hibernate off |
150 | |
151 | # Set power plan to high performance |
152 | powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c |
153 | |
154 | # Disable sleep |
155 | powercfg /change standby-timeout-ac 0 |
156 | powercfg /change standby-timeout-dc 0 |
157 | |
158 | # Disable monitor timeout |
159 | powercfg /change monitor-timeout-ac 0 |
160 | powercfg /change monitor-timeout-dc 0 |
161 | |
162 | # Disable disk timeout |
163 | powercfg /change disk-timeout-ac 0 |
164 | powercfg /change disk-timeout-dc 0 |
165 | |
166 | # Disable hybrid sleep |
167 | powercfg /change hibernate-timeout-ac 0 |
168 | powercfg /change hibernate-timeout-dc 0 |
169 | } |
170 | |
171 | # Function to optimize network settings |
172 | Function Optimize-NetworkSettings { |
173 | Write-Host "Optimizing network settings..." |
174 | |
175 | # Disable IPv6 |
176 | Disable-NetAdapterBinding -Name "*" -ComponentID "ms_tcpip6" |
177 | |
178 | # Set DNS Client service to automatic |
179 | Set-Service "Dnscache" -StartupType Automatic |
180 | |
181 | # Disable NetBIOS over TCP/IP |
182 | $adapters = Get-WmiObject Win32_NetworkAdapterConfiguration |
183 | foreach($adapter in $adapters) { |
184 | $adapter.SetTcpipNetbios(2) |
185 | } |
186 | |
187 | # Optimize TCP/IP settings |
188 | netsh int tcp set global autotuninglevel=normal |
189 | netsh int tcp set global chimney=enabled |
190 | netsh int tcp set global dca=enabled |
191 | netsh int tcp set global netdma=enabled |
192 | } |
193 | |
194 | # Main execution |
195 | Write-Host "Starting Windows Debloat and Optimization Script..." |
196 | Write-Host "Creating System Restore Point..." |
197 | |
198 | # Execute functions |
199 | Remove-WindowsApps |
200 | Disable-UnwantedServices |
201 | Disable-Telemetry |
202 | Optimize-WindowsPerformance |
203 | Optimize-PowerSettings |
204 | Optimize-NetworkSettings |
205 | |
206 | # Clear temp files |
207 | Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue |
208 | Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue |
209 | |
210 | Write-Host "Cleanup and optimization complete. Please restart your computer for changes to take effect." |
211 | |
212 | # Optional: Force restart |
213 | # Restart-Computer -Force |