2 Commits

Author SHA1 Message Date
Raphire
b9de9b353d Fix Modern Standby check to be language-independant 2025-08-20 20:07:59 +02:00
Raphire
b27971933e Properly check if Modern Standby is supported 2025-08-20 10:52:14 +02:00
30 changed files with 142 additions and 330 deletions

View File

@@ -21,7 +21,7 @@ Microsoft.MicrosoftJournal # Digital note-taking app optimiz
Microsoft.MicrosoftOfficeHub # Hub to access Microsoft Office apps and documents (Precursor to Microsoft 365 app)
Microsoft.MicrosoftPowerBIForWindows # Business analytics service client
Microsoft.MicrosoftSolitaireCollection # Collection of solitaire card games
Microsoft.MicrosoftStickyNotes # Digital sticky notes app (Deprecated & replaced by OneNote)
Microsoft.MicrosoftStickyNotes # Digital sticky notes app
Microsoft.MixedReality.Portal # Portal for Windows Mixed Reality headsets
Microsoft.NetworkSpeedTest # Internet connection speed test utility
Microsoft.News # News aggregator (Replaced Bing News, now part of Microsoft Start)

View File

@@ -1,11 +1,16 @@
- Disable & remove Microsoft Copilot
- Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads
- Disable tips, tricks, suggestions and ads in start, settings, notifications and File Explorer
- Disable ads, suggestions and the MSN news feed in Microsoft Edge
- Disable tips & tricks on the lockscreen (This may change your lockscreen wallpaper)
- Disable & remove Bing web search, Bing AI and Cortana from Windows search
- Show file extensions for known file types
- Disable widgets on the taskbar & lockscreen
- Disable Fast Start-up
Win11Debloat will make the following changes:
- Remove the default selection of apps, the list can be found in the 'Appslist.txt' file.
- Disable telemetry, diagnostic data, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions and ads in start, settings, notifications and more.
- Disable ads and the MSN news feed in Microsoft Edge.
- Disable tips & tricks on the lockscreen. (This may change your lockscreen wallpaper)
- Disable & remove Bing web search, Bing AI and Cortana from Windows search.
- Disable & remove Microsoft Copilot. (W11 only)
- Disable Fast Start-up to ensure a full shutdown.
- Disable network connectivity during Modern Standby to reduce battery drain. (W11 only)
- Show file extensions for known file types.
- Hide the 3D objects folder in Windows Explorer. (W10 only)
- Disable the widget service & hide the icon from the taskbar.
- Hide the Chat (meet now) icon from the taskbar.

View File

@@ -6,23 +6,21 @@ disable telemetry, remove intrusive interface elements and much more.
All Features
-------------------------------------------------------------------------------------------
App Removal
- Remove a wide variety of preinstalled apps.
- Remove a wide variety of bloatware apps.
- Remove or replace all pinned apps from start for the current user, or for all existing & new users. (W11 only)
Telemetry, Tracking & Suggested Content
- Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions & ads across Windows.
- Disable ads, suggestions and the MSN news feed in Microsoft Edge.
- Disable ads and the MSN news feed in Microsoft Edge.
- Disable the 'Windows Spotlight' desktop background option.
Bing Web Search, Copilot & AI Features
- Disable & remove Bing web search, Bing AI and Cortana from Windows search.
- Disable & remove Microsoft Copilot.
- Disable Windows Recall. (W11 only)
- Disable Click to Do, AI text & image analysis tool. (W11 only)
- Disable AI Features in Edge. (W11 only)
- Disable AI Features in Paint. (W11 only)
- Disable AI Features in Notepad. (W11 only)
- Disable & remove Microsoft Copilot. (W11 only)
- Disable Windows Recall snapshots. (W11 only)
- Disable AI Features in Paint (W11 only)
- Disable AI Features in Notepad (W11 only)
Personalisation
- Enable dark mode for system and apps.
@@ -34,19 +32,18 @@ Personalisation
File Explorer
- Change the default location that File Explorer opens to.
- Show hidden files, folders and drives.
- Show hidden files, folders & drives.
- Show file extensions for known file types.
- Hide the Home or Gallery section from the File Explorer navigation pane. (W11 only)
- Hide the 3D objects, music or OneDrive folder from the File Explorer navigation pane. (W10 only)
- Hide duplicate removable drive entries from the File Explorer navigation pane.
- Hide the 3D objects, music or OneDrive folder from the File Explorer sidepanel. (W10 only)
- Hide duplicate removable drive entries from the File Explorer sidepanel.
Taskbar
- Align taskbar icons to the left. (W11 only)
- Choose combine mode for taskbar buttons and labels. (W11 only)
- Hide or change the search icon/box on the taskbar. (W11 only)
- Hide the taskview button from the taskbar. (W11 only)
- Disable widgets on the taskbar & lockscreen.
- Hide the chat (meet now) icon from the taskbar. (W10 only)
- Disable the widgets service & hide icon from the taskbar.
- Hide the chat (meet now) icon from the taskbar.
- Enable the 'End Task' option in the taskbar right click menu. (W11 only)
- Enable the 'Last Active Click' behavior in the taskbar app area.
@@ -65,19 +62,17 @@ Other
Default mode
-------------------------------------------------------------------------------------------
The default mode applies the changes that are recommended for most users. This includes:
- Remove the default selection or your custom selection of apps.
- Remove the default selection of apps, the list can be found in the 'Appslist.txt' file.
- Disable telemetry, diagnostic data, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions & ads across Windows.
- Disable ads, suggestions and the MSN news feed in Microsoft Edge.
- Disable tips, tricks, suggestions and ads in start, settings, notifications and more.
- Disable ads and the MSN news feed in Microsoft Edge.
- Disable tips & tricks on the lockscreen. (This may change your lockscreen wallpaper)
- Disable & remove Bing web search, Bing AI and Cortana from Windows search.
- Disable & remove Microsoft Copilot.
- Disable Windows Recall. (W11 only)
- Disable Click to Do, AI text & image analysis tool. (W11 only)
- Disable & remove Microsoft Copilot. (W11 only)
- Disable Fast Start-up to ensure a full shutdown.
- Disable network connectivity during Modern Standby to reduce battery drain. (W11 only)
- Show file extensions for known file types.
- Hide the 3D objects folder in Windows Explorer. (W10 only)
- Disable widgets on the taskbar & lockscreen.
- Hide the Chat (meet now) icon from the taskbar. (W10 only)
- Disable the widget service & hide the icon from the taskbar.
- Hide the Chat (meet now) icon from the taskbar.

View File

@@ -6,8 +6,7 @@ param (
[string]$User,
[switch]$CreateRestorePoint,
[switch]$RunAppsListGenerator, [switch]$RunAppConfigurator,
[switch]$RunDefaults,
[switch]$RunDefaultsLite,
[switch]$RunDefaults, [switch]$RunWin11Defaults,
[switch]$RunSavedSettings,
[switch]$RemoveApps,
[switch]$RemoveAppsCustom,
@@ -35,14 +34,12 @@ param (
[switch]$DisableTransparency,
[switch]$DisableAnimations,
[switch]$TaskbarAlignLeft,
[switch]$CombineTaskbarAlways, [switch]$CombineTaskbarWhenFull, [switch]$CombineTaskbarNever,
[switch]$HideSearchTb, [switch]$ShowSearchIconTb, [switch]$ShowSearchLabelTb, [switch]$ShowSearchBoxTb,
[switch]$HideTaskview,
[switch]$DisableStartRecommended,
[switch]$DisableStartPhoneLink,
[switch]$DisableCopilot,
[switch]$DisableRecall,
[switch]$DisableClickToDo,
[switch]$DisablePaintAI,
[switch]$DisableNotepadAI,
[switch]$DisableEdgeAI,
@@ -88,7 +85,7 @@ Write-Output "------------------------------------------------------------------
Write-Output "> Downloading Win11Debloat..."
# Download latest version of Win11Debloat from github as zip archive
Invoke-RestMethod https://api.github.com/repos/Raphire/Win11Debloat/zipball/2025.09.28 -OutFile "$env:TEMP/win11debloat.zip"
Invoke-RestMethod https://api.github.com/repos/Raphire/Win11Debloat/zipball/2025.08.16 -OutFile "$env:TEMP/win11debloat.zip"
# Remove old script folder if it exists, except for CustomAppsList and SavedSettings files
if (Test-Path "$env:TEMP/Win11Debloat") {

View File

@@ -101,19 +101,18 @@ Below is an overview of the key features and functionality offered by Win11Deblo
#### Telemetry, Tracking & Suggested Content
- Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions & ads across Windows.
- Disable ads, suggestions and the MSN news feed in Microsoft Edge.
- Disable tips, tricks, suggestions and ads in start, settings, notifications, File Explorer, and on the lockscreen.
- Disable ads and the MSN news feed in Microsoft Edge.
- Disable the 'Windows Spotlight' desktop background option.
#### Bing Web Search, Copilot & AI Features
- Disable & remove Bing web search, Bing AI and Cortana from Windows search.
- Disable & remove Microsoft Copilot.
- Disable Windows Recall. (W11 only)
- Disable Click to Do, AI text & image analysis tool. (W11 only)
- Disable AI Features in Edge. (W11 only)
- Disable AI Features in Paint. (W11 only)
- Disable AI Features in Notepad. (W11 only)
- Disable & remove Microsoft Copilot. (W11 only)
- Disable Windows Recall snapshots. (W11 only)
- Disable AI Features in Edge (W11 only)
- Disable AI Features in Paint (W11 only)
- Disable AI Features in Notepad (W11 only)
#### Personalisation
@@ -136,11 +135,10 @@ Below is an overview of the key features and functionality offered by Win11Deblo
#### Taskbar
- Align taskbar icons to the left. (W11 only)
- Choose combine mode for taskbar buttons and labels. (W11 only)
- Hide or change the search icon/box on the taskbar. (W11 only)
- Hide the taskview button from the taskbar. (W11 only)
- Disable widgets on the taskbar & lockscreen.
- Hide the chat (meet now) icon from the taskbar. (W10 only)
- Disable the widgets service & hide icon from the taskbar.
- Hide the chat (meet now) icon from the taskbar.
- Enable the 'End Task' option in the taskbar right click menu. (W11 only)
- Enable the 'Last Active Click' behavior in the taskbar app area. This allows you to repeatedly click on an application's icon in the taskbar to switch focus between the open windows of that application.
@@ -159,32 +157,27 @@ Below is an overview of the key features and functionality offered by Win11Deblo
### Default Settings
Win11Debloat's default mode allows you to quickly and easily apply the changes that are recommended for most people. This includes removing many annoying distractions, disabling telemetry and tracking and optionally uninstalling the default or your custom selection of apps. To apply the default settings, launch the script as you normally would and select option `1` in the script menu.
Win11Debloat offers a default mode that allows you to quickly and easily apply the changes that are recommended for most people. This includes uninstalling apps that most would consider bloatware, removing many annoying distractions and disabling telemetry and tracking. To apply the default settings, launch the script as you normally would and select option `1` in the script menu. Alternatively, you can launch the script with the `-RunDefaults` parameter. Example:
Alternatively, you can launch the script with the `-RunDefaults` or `-RunDefaultsLite` parameters to immediately run the defaults without going through the menu or the app removal options. Using the `-RunDefaults` parameter will run the script in default mode and remove the default selection of apps. While using the `-RunDefaultsLite` parameter will run the script in default mode without removing any apps. Example:
```Powershell
& ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) -RunDefaults
```
#### Changes included in the default mode
- Remove the default or your custom selection of apps. (See below for the default selection of apps)
- Remove the default selection of bloatware apps. (See below for full list)
- Disable telemetry, diagnostic data, activity history, app-launch tracking & targeted ads.
- Disable tips, tricks, suggestions & ads across Windows.
- Disable ads, suggestions and the MSN news feed in Microsoft Edge.
- Disable tips, tricks, suggestions and ads in start, settings, notifications, File Explorer, and on the lockscreen.
- Disable ads and the MSN news feed in Microsoft Edge.
- Disable & remove Bing web search, Bing AI and Cortana from Windows search.
- Disable & remove Microsoft Copilot.
- Disable Windows Recall. (W11 only)
- Disable Click to Do, AI text & image analysis tool. (W11 only)
- Disable & remove Microsoft Copilot. (W11 only)
- Disable Fast Start-up to ensure a full shutdown.
- Disable network connectivity during Modern Standby to reduce battery drain. (W11 only)
- Show file extensions for known file types.
- Hide the 3D objects folder under 'This pc' from File Explorer. (W10 only)
- Disable widgets on the taskbar & lockscreen.
- Hide the Chat (meet now) icon from the taskbar. (W10 only)
- Disable the widget service & hide the icon from the taskbar.
- Hide the Chat (meet now) icon from the taskbar.
#### Apps that ARE removed by default
These apps are uninstalled when you opt to remove the default selection of apps.
#### Apps that ARE removed as part of the default mode
<details>
<summary>Click to expand</summary>
@@ -219,7 +212,6 @@ These apps are uninstalled when you opt to remove the default selection of apps.
- Microsoft.Office.Sway
- Microsoft.OneConnect
- Microsoft.Print3D
- Microsoft.StartExperiencesApp** (Widgets app)
- Microsoft.SkypeApp
- Microsoft.Todos
- Microsoft.WindowsAlarms
@@ -229,7 +221,6 @@ These apps are uninstalled when you opt to remove the default selection of apps.
- Microsoft.XboxApp (Old Xbox Console Companion App, no longer supported)
- Microsoft.ZuneVideo
- MicrosoftCorporationII.MicrosoftFamily (Microsoft Family Safety)
- MicrosoftCorporationII.QuickAssist (Remote assistance tool)
- MicrosoftTeams (Old personal version of MS Teams from the MS Store)
- MSTeams (New MS Teams app)
@@ -246,6 +237,7 @@ These apps are uninstalled when you opt to remove the default selection of apps.
- CyberLinkMediaSuiteEssentials
- DisneyMagicKingdoms
- Disney
- Dolby
- DrawboardPDF
- Duolingo-LearnLanguagesforFree
- EclipseManager
@@ -274,6 +266,7 @@ These apps are uninstalled when you opt to remove the default selection of apps.
- Shazam
- Sidia.LiveWallpaper
- SlingTV
- Speed Test
- Spotify
- TikTok
- TuneInRadio
@@ -283,14 +276,11 @@ These apps are uninstalled when you opt to remove the default selection of apps.
- Wunderlist
- XING
* Removed when disabling Bing web search, Bing AI and Cortana from Windows search
** Removed when disabling widgets on the taskbar & lockscreen
* App is removed when disabling Bing in Windows search.
</blockquote>
</details>
#### Apps that are NOT removed by default
These apps will not be removed by Win11Debloat unless explicitly selected by the user.
#### Apps that are NOT removed as part of the default mode
<details>
<summary>Click to expand</summary>

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +0,0 @@
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=dword:00000001

Binary file not shown.

View File

@@ -1,7 +0,0 @@
Windows Registry Editor Version 5.00
[hkey_users\default\Software\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=dword:00000001

View File

@@ -3,7 +3,3 @@ Windows Registry Editor Version 5.00
[hkey_users\default\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize]
"AppsUseLightTheme"=dword:00000000
"SystemUsesLightTheme"=dword:00000000
[hkey_users\default\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
"AppsUseLightTheme"="reg add HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f"
"SystemUsesLightTheme"="reg add HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f"

View File

@@ -1,7 +0,0 @@
Windows Registry Editor Version 5.00
; Allow personalization of ads, Microsoft Edge, search, news and other Microsoft services by sending browsing history, favorites and collections, usage and other browsing data to Microsoft
; Allow sending required and optional diagnostic data about browser usage
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"PersonalizationReportingEnabled"=-
"DiagnosticData"=-

View File

@@ -1,7 +0,0 @@
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=-
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI]
"DisableClickToDo"=-

Binary file not shown.

View File

@@ -5,10 +5,10 @@ set "wtScoopPath=%USERPROFILE%\scoop\apps\windows-terminal\current\wt.exe"
:: Launch the script in Windows Terminal if installed, otherwise use default PowerShell.
if exist "%wtDefaultPath%" (
PowerShell -Command "Start-Process -FilePath '%wtDefaultPath%' -ArgumentList 'PowerShell -NoProfile -ExecutionPolicy Bypass -File ""%~dp0Win11Debloat.ps1""' -Verb RunAs"
PowerShell -Command "Start-Process -FilePath '%wtDefaultPath%' -ArgumentList 'PowerShell -NoProfile -ExecutionPolicy Bypass -File \"\"%~dp0Win11Debloat.ps1\"\"' -Verb RunAs"
) else if exist "%wtScoopPath%" (
PowerShell -Command "Start-Process -FilePath '%wtScoopPath%' -ArgumentList 'PowerShell -NoProfile -ExecutionPolicy Bypass -File ""%~dp0Win11Debloat.ps1""' -Verb RunAs"
PowerShell -Command "Start-Process -FilePath '%wtScoopPath%' -ArgumentList 'PowerShell -NoProfile -ExecutionPolicy Bypass -File \"\"%~dp0Win11Debloat.ps1\"\"' -Verb RunAs"
) else (
echo Windows Terminal not found, using default PowerShell...
PowerShell -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dp0Win11Debloat.ps1""' -Verb RunAs}"
PowerShell -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File \"\"%~dp0Win11Debloat.ps1\"\"' -Verb RunAs}"
)

View File

@@ -8,8 +8,7 @@ param (
[string]$User,
[switch]$CreateRestorePoint,
[switch]$RunAppsListGenerator, [switch]$RunAppConfigurator,
[switch]$RunDefaults,
[switch]$RunDefaultsLite,
[switch]$RunDefaults, [switch]$RunWin11Defaults,
[switch]$RunSavedSettings,
[switch]$RemoveApps,
[switch]$RemoveAppsCustom,
@@ -37,14 +36,12 @@ param (
[switch]$DisableTransparency,
[switch]$DisableAnimations,
[switch]$TaskbarAlignLeft,
[switch]$CombineTaskbarAlways, [switch]$CombineTaskbarWhenFull, [switch]$CombineTaskbarNever,
[switch]$HideSearchTb, [switch]$ShowSearchIconTb, [switch]$ShowSearchLabelTb, [switch]$ShowSearchBoxTb,
[switch]$HideTaskview,
[switch]$DisableStartRecommended,
[switch]$DisableStartPhoneLink,
[switch]$DisableCopilot,
[switch]$DisableRecall,
[switch]$DisableClickToDo,
[switch]$DisablePaintAI,
[switch]$DisableNotepadAI,
[switch]$DisableEdgeAI,
@@ -470,7 +467,7 @@ function ForceRemoveEdge {
$hklm = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $regView)
$hklm.CreateSubKey('SOFTWARE\Microsoft\EdgeUpdateDev').SetValue('AllowUninstall', '')
# Create stub (Creating this somehow allows uninstalling Edge)
# Create stub (Creating this somehow allows uninstalling edge)
$edgeStub = "$env:SystemRoot\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe"
New-Item $edgeStub -ItemType Directory | Out-Null
New-Item "$edgeStub\MicrosoftEdge.exe" | Out-Null
@@ -503,7 +500,7 @@ function ForceRemoveEdge {
Write-Output "Cleaning up registry..."
# Remove MS Edge from autostart
# Remove ms edge from autostart
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C" /f *>$null
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Microsoft Edge Update" /f *>$null
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run" /v "MicrosoftEdgeAutoLaunch_A9F6DCE4ABADF4F51CF45CD7129E3C6C" /f *>$null
@@ -574,38 +571,6 @@ function CheckModernStandbySupport {
}
# Returns the directory path of the specified user, exits script if user path can't be found
function GetUserDirectory {
param (
$userName,
$fileName = "",
$exitIfPathNotFound = $true
)
try {
$userDirectoryExists = Test-Path "$env:SystemDrive\Users\$userName"
$userPath = "$env:SystemDrive\Users\$userName\$fileName"
if ((Test-Path $userPath) -or ($userDirectoryExists -and (-not $exitIfPathNotFound))) {
return $userPath
}
$userDirectoryExists = Test-Path ($env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\$userName")
$userPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\$userName\$fileName"
if ((Test-Path $userPath) -or ($userDirectoryExists -and (-not $exitIfPathNotFound))) {
return $userPath
}
} catch {
Write-Host "Error: Something went wrong when trying to find the user directory path for user $userName. Please ensure the user exists on this system." -ForegroundColor Red
AwaitKeyToExit
}
Write-Host "Error: Unable to find user directory path for user $userName" -ForegroundColor Red
AwaitKeyToExit
}
# Import & execute regfile
function RegImport {
param (
@@ -616,14 +581,14 @@ function RegImport {
Write-Output $message
if ($script:Params.ContainsKey("Sysprep")) {
$defaultUserPath = GetUserDirectory -userName "Default" -fileName "NTUSER.DAT"
$defaultUserPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), '\Default\NTUSER.DAT'
reg load "HKU\Default" $defaultUserPath | Out-Null
reg import "$PSScriptRoot\Regfiles\Sysprep\$path"
reg unload "HKU\Default" | Out-Null
}
elseif ($script:Params.ContainsKey("User")) {
$userPath = GetUserDirectory -userName $script:Params.Item("User") -fileName "NTUSER.DAT"
$userPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\$($script:Params.Item("User"))\NTUSER.DAT"
reg load "HKU\Default" $userPath | Out-Null
reg import "$PSScriptRoot\Regfiles\Sysprep\$path"
@@ -686,7 +651,7 @@ function ReplaceStartMenuForAllUsers {
}
# Get path to start menu file for all users
$userPathString = GetUserDirectory -userName "*" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"
$userPathString = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\*\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState"
$usersStartMenuPaths = get-childitem -path $userPathString
# Go through all users and replace the start menu file
@@ -695,7 +660,7 @@ function ReplaceStartMenuForAllUsers {
}
# Also replace the start menu file for the default user profile
$defaultStartMenuPath = GetUserDirectory -userName "Default" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" -exitIfPathNotFound $false
$defaultStartMenuPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), '\Default\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState'
# Create folder if it doesn't exist
if (-not (Test-Path $defaultStartMenuPath)) {
@@ -720,7 +685,7 @@ function ReplaceStartMenu {
# Change path to correct user if a user was specified
if ($script:Params.ContainsKey("User")) {
$startMenuBinFile = GetUserDirectory -userName "$(GetUserName)" -fileName "AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin" -exitIfPathNotFound $false
$startMenuBinFile = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\$(GetUserName)\AppData\Local\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState\start2.bin"
}
# Check if template bin file exists, return early if it doesn't
@@ -734,22 +699,21 @@ function ReplaceStartMenu {
return
}
$userName = [regex]::Match($startMenuBinFile, '(?:Users\\)([^\\]+)(?:\\AppData)').Groups[1].Value
# Check if bin file exists, return early if it doesn't
if (-not (Test-Path $startMenuBinFile)) {
Write-Host "Error: Unable to replace start menu for user $(GetUserName), original start2.bin file not found" -ForegroundColor Red
return
}
$backupBinFile = $startMenuBinFile + ".bak"
if (Test-Path $startMenuBinFile) {
# Backup current start menu file
Move-Item -Path $startMenuBinFile -Destination $backupBinFile -Force
} else {
Write-Host "Warning: Unable to find original start2.bin file for user $userName. No backup was created for this user!" -ForegroundColor Yellow
New-Item -ItemType File -Path $startMenuBinFile -Force
}
# Copy template file
Copy-Item -Path $startMenuTemplate -Destination $startMenuBinFile -Force
Write-Output "Replaced start menu for user $userName"
Write-Output "Replaced start menu for user $(GetUserName)"
}
@@ -757,8 +721,7 @@ function ReplaceStartMenu {
function AddParameter {
param (
$parameterName,
$message,
$addToFile = $true
$message
)
# Add key if it doesn't already exist
@@ -766,11 +729,6 @@ function AddParameter {
$script:Params.Add($parameterName, $true)
}
if (-not $addToFile) {
Write-Output "- $message"
return
}
# Create or clear file that stores last used settings
if (-not (Test-Path "$PSScriptRoot/SavedSettings")) {
$null = New-Item "$PSScriptRoot/SavedSettings"
@@ -811,15 +769,12 @@ function PrintHeader {
function PrintFromFile {
param (
$path,
$title,
$printHeader = $true
$title
)
if ($printHeader) {
Clear-Host
PrintHeader $title
}
# Get & print script menu from file
Foreach ($line in (Get-Content -Path $path )) {
@@ -828,26 +783,6 @@ function PrintFromFile {
}
function PrintAppsList {
param (
$path,
$printCount = $false
)
if (-not (Test-Path $path)) {
return
}
$appsList = ReadAppslistFromFile $path
if ($printCount) {
Write-Output "- Remove $($appsList.Count) apps:"
}
Write-Host $appsList -ForegroundColor DarkGray
}
function AwaitKeyToExit {
# Suppress prompt if Silent parameter was passed
if (-not $Silent) {
@@ -882,6 +817,7 @@ function CreateSystemRestorePoint {
Enable-ComputerRestore -Drive "$env:SystemDrive"
} catch {
Write-Host "Error: Failed to enable System Restore: $_" -ForegroundColor Red
Write-Output ""
return
}
}
@@ -890,6 +826,9 @@ function CreateSystemRestorePoint {
if (-not $enableSystemRestoreJobDone) {
Write-Host "Error: Failed to enable system restore and create restore point, operation timed out" -ForegroundColor Red
Write-Output ""
Write-Output "Press any key to continue anyway..."
$null = [System.Console]::ReadKey()
return
} else {
Receive-Job $enableSystemRestoreJob
@@ -906,6 +845,7 @@ function CreateSystemRestorePoint {
$recentRestorePoints = Get-ComputerRestorePoint | Where-Object { (Get-Date) - [System.Management.ManagementDateTimeConverter]::ToDateTime($_.CreationTime) -le (New-TimeSpan -Hours 24) }
} catch {
Write-Host "Error: Unable to retrieve existing restore points: $_" -ForegroundColor Red
Write-Output ""
return
}
@@ -925,6 +865,9 @@ function CreateSystemRestorePoint {
if (-not $createRestorePointJobDone) {
Write-Host "Error: Failed to create system restore point, operation timed out" -ForegroundColor Red
Write-Output ""
Write-Output "Press any key to continue anyway..."
$null = [System.Console]::ReadKey()
} else {
Receive-Job $createRestorePointJob
}
@@ -945,8 +888,8 @@ function DisplayCustomModeOptions {
Do {
Write-Host "Options:" -ForegroundColor Yellow
Write-Host " (n) Don't remove any apps" -ForegroundColor Yellow
Write-Host " (1) Only remove the default selection of apps" -ForegroundColor Yellow
Write-Host " (2) Remove the default selection of apps, as well as mail & calendar apps, developer apps and gaming apps" -ForegroundColor Yellow
Write-Host " (1) Only remove the default selection of bloatware apps from 'Appslist.txt'" -ForegroundColor Yellow
Write-Host " (2) Remove default selection of bloatware apps, as well as mail & calendar apps, developer apps and gaming apps" -ForegroundColor Yellow
Write-Host " (3) Manually select which apps to remove" -ForegroundColor Yellow
$RemoveAppsInput = Read-Host "Do you want to remove any apps? Apps will be removed for all users (n/1/2/3)"
@@ -970,10 +913,10 @@ function DisplayCustomModeOptions {
# Select correct option based on user input
switch ($RemoveAppsInput) {
'1' {
AddParameter 'RemoveApps' 'Remove the default selection of apps'
AddParameter 'RemoveApps' 'Remove default selection of bloatware apps'
}
'2' {
AddParameter 'RemoveApps' 'Remove the default selection of apps'
AddParameter 'RemoveApps' 'Remove default selection of bloatware apps'
AddParameter 'RemoveCommApps' 'Remove the Mail, Calendar, and People apps'
AddParameter 'RemoveW11Outlook' 'Remove the new Outlook for Windows app'
AddParameter 'RemoveDevApps' 'Remove developer-related apps'
@@ -1001,9 +944,9 @@ function DisplayCustomModeOptions {
Write-Output ""
if ($( Read-Host -Prompt "Disable tips, tricks, suggestions and ads in start, settings, notifications, explorer, lockscreen and Edge? (y/n)" ) -eq 'y') {
if ($( Read-Host -Prompt "Disable tips, tricks, suggestions and ads in start, settings, notifications, explorer, lockscreen and edge? (y/n)" ) -eq 'y') {
AddParameter 'DisableSuggestions' 'Disable tips, tricks, suggestions and ads in start, settings, notifications and File Explorer'
AddParameter 'DisableEdgeAds' 'Disable ads, suggestions and the MSN news feed in Microsoft Edge'
AddParameter 'DisableEdgeAds' 'Disable ads and the MSN news feed in Microsoft Edge'
AddParameter 'DisableSettings365Ads' 'Disable Microsoft 365 ads in Settings Home'
AddParameter 'DisableLockscreenTips' 'Disable tips & tricks on the lockscreen'
}
@@ -1022,8 +965,8 @@ function DisplayCustomModeOptions {
Do {
Write-Host "Options:" -ForegroundColor Yellow
Write-Host " (n) Don't disable any AI features" -ForegroundColor Yellow
Write-Host " (1) Disable Microsoft Copilot, Windows Recall and Click to Do" -ForegroundColor Yellow
Write-Host " (2) Disable Microsoft Copilot, Windows Recall, Click to Do and AI features in Microsoft Edge, Paint and Notepad" -ForegroundColor Yellow
Write-Host " (1) Disable Microsoft Copilot and Windows Recall snapshots" -ForegroundColor Yellow
Write-Host " (2) Disable Microsoft Copilot, Windows Recall snapshots and AI features in Microsoft Edge, Paint and Notepad" -ForegroundColor Yellow
$DisableAIInput = Read-Host "Do you want to disable any AI features? This applies to all users (n/1/2)"
}
while ($DisableAIInput -ne 'n' -and $DisableAIInput -ne '0' -and $DisableAIInput -ne '1' -and $DisableAIInput -ne '2')
@@ -1032,13 +975,11 @@ function DisplayCustomModeOptions {
switch ($DisableAIInput) {
'1' {
AddParameter 'DisableCopilot' 'Disable & remove Microsoft Copilot'
AddParameter 'DisableRecall' 'Disable Windows Recall'
AddParameter 'DisableClickToDo' 'Disable Click to Do (AI text & image analysis)'
AddParameter 'DisableRecall' 'Disable Windows Recall snapshots'
}
'2' {
AddParameter 'DisableCopilot' 'Disable & remove Microsoft Copilot'
AddParameter 'DisableRecall' 'Disable Windows Recall'
AddParameter 'DisableClickToDo' 'Disable Click to Do (AI text & image analysis)'
AddParameter 'DisableRecall' 'Disable Windows Recall snapshots'
AddParameter 'DisableEdgeAI' 'Disable AI features in Edge'
AddParameter 'DisablePaintAI' 'Disable AI features in Paint'
AddParameter 'DisableNotepadAI' 'Disable AI features in Notepad'
@@ -1187,31 +1128,6 @@ function DisplayCustomModeOptions {
AddParameter 'TaskbarAlignLeft' 'Align taskbar icons to the left'
}
# Show options for combine icon on taskbar, only continue on valid input
Do {
Write-Output ""
Write-Host " Options:" -ForegroundColor Yellow
Write-Host " (n) No change" -ForegroundColor Yellow
Write-Host " (1) Always" -ForegroundColor Yellow
Write-Host " (2) When taskbar is full" -ForegroundColor Yellow
Write-Host " (3) Never" -ForegroundColor Yellow
$TbCombineTaskbar = Read-Host " Combine taskbar buttons and hide labels? (n/1/2/3)"
}
while ($TbCombineTaskbar -ne 'n' -and $TbCombineTaskbar -ne '0' -and $TbCombineTaskbar -ne '1' -and $TbCombineTaskbar -ne '2' -and $TbCombineTaskbar -ne '3')
# Select correct taskbar goup option based on user input
switch ($TbCombineTaskbar) {
'1' {
AddParameter 'CombineTaskbarAlways' 'Always combine taskbar buttons and hide labels'
}
'2' {
AddParameter 'CombineTaskbarWhenFull' 'Combine taskbar buttons and hide labels when taskbar is full'
}
'3' {
AddParameter 'CombineTaskbarNever' 'Never combine taskbar buttons and show labels'
}
}
# Show options for search icon on taskbar, only continue on valid input
Do {
Write-Output ""
@@ -1250,8 +1166,8 @@ function DisplayCustomModeOptions {
Write-Output ""
if ($( Read-Host -Prompt " Disable the widgets service to remove widgets on the taskbar & lockscreen? (y/n)" ) -eq 'y') {
AddParameter 'DisableWidgets' 'Disable widgets on the taskbar & lockscreen'
if ($( Read-Host -Prompt " Disable the widgets service and hide the icon from the taskbar? (y/n)" ) -eq 'y') {
AddParameter 'DisableWidgets' 'Disable the widget service & hide the widget (news and interests) icon from the taskbar'
}
# Only show this options for Windows users running build 22621 or earlier
@@ -1439,9 +1355,15 @@ else {
$ProgressPreference = 'Continue'
}
# Make sure all requirements for Sysprep are met, if Sysprep is enabled
if ($script:Params.ContainsKey("Sysprep")) {
$defaultUserPath = GetUserDirectory -userName "Default"
$defaultUserPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), '\Default\NTUSER.DAT'
# Exit script if default user directory or NTUSER.DAT file cannot be found
if (-not (Test-Path "$defaultUserPath")) {
Write-Host "Error: Unable to start Win11Debloat in Sysprep mode, cannot find default user folder at '$defaultUserPath'" -ForegroundColor Red
AwaitKeyToExit
}
# Exit script if run in Sysprep mode on Windows 10
if ($WinVersion -lt 22000) {
Write-Host "Error: Win11Debloat Sysprep mode is not supported on Windows 10" -ForegroundColor Red
@@ -1451,7 +1373,13 @@ if ($script:Params.ContainsKey("Sysprep")) {
# Make sure all requirements for User mode are met, if User is specified
if ($script:Params.ContainsKey("User")) {
$userPath = GetUserDirectory -userName $script:Params.Item("User")
$userPath = $env:USERPROFILE -Replace ('\\' + $env:USERNAME + '$'), "\$($script:Params.Item("User"))\NTUSER.DAT"
# Exit script if user directory or NTUSER.DAT file cannot be found
if (-not (Test-Path "$userPath")) {
Write-Host "Error: Unable to run Win11Debloat for user $($script:Params.Item("User")), cannot find user data at '$userPath'" -ForegroundColor Red
AwaitKeyToExit
}
}
# Remove SavedSettings file if it exists and is empty
@@ -1478,8 +1406,8 @@ if ($RunAppConfigurator -or $RunAppsListGenerator) {
}
# Change script execution based on provided parameters or user input
if ((-not $script:Params.Count) -or $RunDefaults -or $RunDefaultsLite -or $RunSavedSettings -or ($SPParamCount -eq $script:Params.Count)) {
if ($RunDefaults -or $RunDefaultsLite) {
if ((-not $script:Params.Count) -or $RunDefaults -or $RunWin11Defaults -or $RunSavedSettings -or ($SPParamCount -eq $script:Params.Count)) {
if ($RunDefaults -or $RunWin11Defaults) {
$Mode = '1'
}
elseif ($RunSavedSettings) {
@@ -1534,82 +1462,15 @@ if ((-not $script:Params.Count) -or $RunDefaults -or $RunDefaultsLite -or $RunSa
switch ($Mode) {
# Default mode, loads defaults after confirmation
'1' {
AddParameter 'CreateRestorePoint' 'Create a system restore point' $false
# Show the default settings with confirmation, unless Silent parameter was passed
if (-not $Silent) {
# Show options for app removal
if ((-not $RunDefaults) -and (-not $RunDefaultsLite)) {
PrintHeader 'Default Mode'
Do {
Write-Host "Options:" -ForegroundColor Yellow
Write-Host " (n) Don't remove any apps" -ForegroundColor Yellow
Write-Host " (1) Only remove the default selection of apps" -ForegroundColor Yellow
Write-Host " (2) Manually select which apps to remove" -ForegroundColor Yellow
$RemoveAppsInput = Read-Host "Do you want to remove any apps? Apps will be removed for all users (n/1/2)"
# Show app selection form if user entered option 3
if ($RemoveAppsInput -eq '2') {
$result = ShowAppSelectionForm
if ($result -ne [System.Windows.Forms.DialogResult]::OK) {
# User cancelled or closed app selection, show error and change RemoveAppsInput so the menu will be shown again
Write-Output ""
Write-Host "Cancelled application selection, please try again" -ForegroundColor Red
$RemoveAppsInput = 'c'
}
Write-Output ""
}
}
while ($RemoveAppsInput -ne 'n' -and $RemoveAppsInput -ne '0' -and $RemoveAppsInput -ne '1' -and $RemoveAppsInput -ne '2')
} elseif ($RunDefaultsLite) {
$RemoveAppsInput = '0'
} else {
$RemoveAppsInput = '1'
}
PrintHeader 'Default Mode'
Write-Output "Win11Debloat will make the following changes:"
# Select correct option based on user input
switch ($RemoveAppsInput) {
'1' {
AddParameter 'RemoveApps' 'Remove the default selection of apps:' $false
PrintAppsList "$PSScriptRoot/Appslist.txt"
}
'2' {
AddParameter 'RemoveAppsCustom' "Remove $($script:SelectedApps.Count) apps:" $false
PrintAppsList "$PSScriptRoot/CustomAppsList"
}
}
# Only add this option for Windows 10 users
if (get-ciminstance -query "select caption from win32_operatingsystem where caption like '%Windows 10%'") {
AddParameter 'Hide3dObjects' "Hide the 3D objects folder under 'This pc' in File Explorer" $false
AddParameter 'HideChat' 'Hide the chat (meet now) icon from the taskbar' $false
}
# Only add these options for Windows 11 users (build 22000+)
if ($WinVersion -ge 22000) {
if ($script:ModernStandbySupported) {
AddParameter 'DisableModernStandbyNetworking' 'Disable network connectivity during Modern Standby' $false
}
AddParameter 'DisableRecall' 'Disable Windows Recall' $false
AddParameter 'DisableClickToDo' 'Disable Click to Do (AI text & image analysis)' $false
}
PrintFromFile "$PSScriptRoot/Assets/Menus/DefaultSettings" "Default Mode" $false
PrintFromFile "$PSScriptRoot/Assets/Menus/DefaultSettings" "Default Mode"
Write-Output "Press enter to execute the script or press CTRL+C to quit..."
Read-Host | Out-Null
}
$DefaultParameterNames = 'DisableCopilot','DisableTelemetry','DisableSuggestions','DisableEdgeAds','DisableLockscreenTips','DisableBing','ShowKnownFileExt','DisableWidgets','DisableFastStartup'
$DefaultParameterNames = 'CreateRestorePoint','RemoveApps','DisableTelemetry','DisableBing','DisableLockscreenTips','DisableSuggestions','DisableEdgeAds','ShowKnownFileExt','DisableWidgets','HideChat','DisableCopilot','DisableFastStartup'
PrintHeader 'Default Mode'
@@ -1619,6 +1480,16 @@ if ((-not $script:Params.Count) -or $RunDefaults -or $RunDefaultsLite -or $RunSa
$script:Params.Add($ParameterName, $true)
}
}
# Only add this option for Windows 10 users, if it doesn't already exist
if ((get-ciminstance -query "select caption from win32_operatingsystem where caption like '%Windows 10%'") -and (-not $script:Params.ContainsKey('Hide3dObjects'))) {
$script:Params.Add('Hide3dObjects', $Hide3dObjects)
}
# Only add this option for Windows 11 users (build 22000+), if it doesn't already exist
if (($WinVersion -ge 22000) -and $script:ModernStandbySupported -and (-not $script:Params.ContainsKey('DisableModernStandbyNetworking'))) {
$script:Params.Add('DisableModernStandbyNetworking', $true)
}
}
# Custom mode, show & add options based on user input
@@ -1666,17 +1537,19 @@ if ((-not $script:Params.Count) -or $RunDefaults -or $RunDefaultsLite -or $RunSa
$parameterName = $line.Substring(0, $line.IndexOf('#'))
# Print parameter description and add parameter to Params list
switch ($parameterName) {
'RemoveApps' {
PrintAppsList "$PSScriptRoot/Appslist.txt" $true
if ($parameterName -eq "RemoveAppsCustom") {
if (-not (Test-Path "$PSScriptRoot/CustomAppsList")) {
# Apps file does not exist, skip
continue
}
'RemoveAppsCustom' {
PrintAppsList "$PSScriptRoot/CustomAppsList" $true
$appsList = ReadAppslistFromFile "$PSScriptRoot/CustomAppsList"
Write-Output "- Remove $($appsList.Count) apps:"
Write-Host $appsList -ForegroundColor DarkGray
}
default {
else {
Write-Output $line.Substring(($line.IndexOf('#') + 1), ($line.Length - $line.IndexOf('#') - 1))
}
}
if (-not $script:Params.ContainsKey($parameterName)) {
$script:Params.Add($parameterName, $true)
@@ -1778,7 +1651,7 @@ switch ($script:Params.Keys) {
continue
}
'DisableEdgeAds' {
RegImport "> Disabling ads, suggestions and the MSN news feed in Microsoft Edge..." "Disable_Edge_Ads_And_Suggestions.reg"
RegImport "> Disabling ads and the MSN news feed in Microsoft Edge..." "Disable_Edge_Ads_And_Suggestions.reg"
continue
}
{$_ -in "DisableLockscrTips", "DisableLockscreenTips"} {
@@ -1814,11 +1687,7 @@ switch ($script:Params.Keys) {
continue
}
'DisableRecall' {
RegImport "> Disabling Windows Recall..." "Disable_AI_Recall.reg"
continue
}
'DisableClickToDo' {
RegImport "> Disabling Click to Do..." "Disable_Click_to_Do.reg"
RegImport "> Disabling Windows Recall snapshots..." "Disable_AI_Recall.reg"
continue
}
'DisableEdgeAI' {
@@ -1897,18 +1766,6 @@ switch ($script:Params.Keys) {
RegImport "> Aligning taskbar buttons to the left..." "Align_Taskbar_Left.reg"
continue
}
'CombineTaskbarAlways' {
RegImport "> Setting the taskbar to always combine buttons and hide labels..." "Combine_Taskbar_Never.reg"
continue
}
'CombineTaskbarWhenFull' {
RegImport "> Setting the taskbar to only combine buttons and hide labels when the taskbar is full..." "Combine_Taskbar_When_Full.reg"
continue
}
'CombineTaskbarNever' {
RegImport "> Setting the taskbar to never combine buttons or hide labels..." "Combine_Taskbar_Never.reg"
continue
}
'HideSearchTb' {
RegImport "> Hiding the search icon from the taskbar..." "Hide_Search_Taskbar.reg"
continue
@@ -1930,7 +1787,7 @@ switch ($script:Params.Keys) {
continue
}
{$_ -in "HideWidgets", "DisableWidgets"} {
RegImport "> Disabling widgets on the taskbar & lockscreen..." "Disable_Widgets_Service.reg"
RegImport "> Disabling the widget service and hiding the widget icon from the taskbar..." "Disable_Widgets_Taskbar.reg"
# Also remove the app package for Widgets
$appsList = 'Microsoft.StartExperiencesApp'