unbloat.ps1
· 7.7 KiB · PowerShell
Исходник
# 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 |