mirror of
https://github.com/Raphire/Win11Debloat.git
synced 2026-04-03 05:56:25 +00:00
196 lines
7.3 KiB
PowerShell
196 lines
7.3 KiB
PowerShell
# Executes a single parameter/feature based on its key
|
|
# Parameters:
|
|
# $paramKey - The parameter name to execute
|
|
function ExecuteParameter {
|
|
param (
|
|
[string]$paramKey
|
|
)
|
|
|
|
# Check if this feature has metadata in Features.json
|
|
$feature = $null
|
|
if ($script:Features.ContainsKey($paramKey)) {
|
|
$feature = $script:Features[$paramKey]
|
|
}
|
|
|
|
# If feature has RegistryKey and ApplyText, use dynamic ImportRegistryFile
|
|
if ($feature -and $feature.RegistryKey -and $feature.ApplyText) {
|
|
ImportRegistryFile "> $($feature.ApplyText)" $feature.RegistryKey
|
|
|
|
# Handle special cases that have additional logic after ImportRegistryFile
|
|
switch ($paramKey) {
|
|
'DisableBing' {
|
|
# Also remove the app package for Bing search
|
|
RemoveApps 'Microsoft.BingSearch'
|
|
}
|
|
'DisableCopilot' {
|
|
# Also remove the app package for Copilot
|
|
RemoveApps 'Microsoft.Copilot'
|
|
}
|
|
'DisableWidgets' {
|
|
# Also remove the app package for Widgets
|
|
RemoveApps 'Microsoft.StartExperiencesApp'
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
# Handle features without RegistryKey or with special logic
|
|
switch ($paramKey) {
|
|
'RemoveApps' {
|
|
Write-Host "> Removing selected apps for $(GetFriendlyTargetUserName)..."
|
|
$appsList = GenerateAppsList
|
|
|
|
if ($appsList.Count -eq 0) {
|
|
Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow
|
|
Write-Host ""
|
|
return
|
|
}
|
|
|
|
Write-Host "$($appsList.Count) apps selected for removal"
|
|
RemoveApps $appsList
|
|
}
|
|
'RemoveAppsCustom' {
|
|
Write-Host "> Removing selected apps..."
|
|
$appsList = LoadAppsFromFile $script:CustomAppsListFilePath
|
|
|
|
if ($appsList.Count -eq 0) {
|
|
Write-Host "No valid apps were selected for removal" -ForegroundColor Yellow
|
|
Write-Host ""
|
|
return
|
|
}
|
|
|
|
Write-Host "$($appsList.Count) apps selected for removal"
|
|
RemoveApps $appsList
|
|
}
|
|
'RemoveCommApps' {
|
|
$appsList = 'Microsoft.windowscommunicationsapps', 'Microsoft.People'
|
|
Write-Host "> Removing Mail, Calendar and People apps..."
|
|
RemoveApps $appsList
|
|
return
|
|
}
|
|
'RemoveW11Outlook' {
|
|
$appsList = 'Microsoft.OutlookForWindows'
|
|
Write-Host "> Removing new Outlook for Windows app..."
|
|
RemoveApps $appsList
|
|
return
|
|
}
|
|
'RemoveGamingApps' {
|
|
$appsList = 'Microsoft.GamingApp', 'Microsoft.XboxGameOverlay', 'Microsoft.XboxGamingOverlay'
|
|
Write-Host "> Removing gaming related apps..."
|
|
RemoveApps $appsList
|
|
return
|
|
}
|
|
'RemoveHPApps' {
|
|
$appsList = 'AD2F1837.HPAIExperienceCenter', 'AD2F1837.HPJumpStarts', 'AD2F1837.HPPCHardwareDiagnosticsWindows', 'AD2F1837.HPPowerManager', 'AD2F1837.HPPrivacySettings', 'AD2F1837.HPSupportAssistant', 'AD2F1837.HPSureShieldAI', 'AD2F1837.HPSystemInformation', 'AD2F1837.HPQuickDrop', 'AD2F1837.HPWorkWell', 'AD2F1837.myHP', 'AD2F1837.HPDesktopSupportUtilities', 'AD2F1837.HPQuickTouch', 'AD2F1837.HPEasyClean', 'AD2F1837.HPConnectedMusic', 'AD2F1837.HPFileViewer', 'AD2F1837.HPRegistration', 'AD2F1837.HPWelcome', 'AD2F1837.HPConnectedPhotopoweredbySnapfish', 'AD2F1837.HPPrinterControl'
|
|
Write-Host "> Removing HP apps..."
|
|
RemoveApps $appsList
|
|
return
|
|
}
|
|
"EnableWindowsSandbox" {
|
|
Write-Host "> Enabling Windows Sandbox..."
|
|
EnableWindowsFeature "Containers-DisposableClientVM"
|
|
Write-Host ""
|
|
return
|
|
}
|
|
"EnableWindowsSubsystemForLinux" {
|
|
Write-Host "> Enabling Windows Subsystem for Linux..."
|
|
EnableWindowsFeature "VirtualMachinePlatform"
|
|
EnableWindowsFeature "Microsoft-Windows-Subsystem-Linux"
|
|
Write-Host ""
|
|
return
|
|
}
|
|
'ClearStart' {
|
|
Write-Host "> Removing all pinned apps from the start menu for user $(GetUserName)..."
|
|
ReplaceStartMenu
|
|
Write-Host ""
|
|
return
|
|
}
|
|
'ReplaceStart' {
|
|
Write-Host "> Replacing the start menu for user $(GetUserName)..."
|
|
ReplaceStartMenu $script:Params.Item("ReplaceStart")
|
|
Write-Host ""
|
|
return
|
|
}
|
|
'ClearStartAllUsers' {
|
|
ReplaceStartMenuForAllUsers
|
|
return
|
|
}
|
|
'ReplaceStartAllUsers' {
|
|
ReplaceStartMenuForAllUsers $script:Params.Item("ReplaceStartAllUsers")
|
|
return
|
|
}
|
|
'DisableStoreSearchSuggestions' {
|
|
if ($script:Params.ContainsKey("Sysprep")) {
|
|
Write-Host "> Disabling Microsoft Store search suggestions in the start menu for all users..."
|
|
DisableStoreSearchSuggestionsForAllUsers
|
|
Write-Host ""
|
|
return
|
|
}
|
|
|
|
Write-Host "> Disabling Microsoft Store search suggestions for user $(GetUserName)..."
|
|
DisableStoreSearchSuggestions
|
|
Write-Host ""
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
# Executes all selected parameters/features
|
|
function ExecuteAllChanges {
|
|
# Build list of actionable parameters (skip control params and data-only params)
|
|
$actionableKeys = @()
|
|
foreach ($paramKey in $script:Params.Keys) {
|
|
if ($script:ControlParams -contains $paramKey) { continue }
|
|
if ($paramKey -eq 'Apps') { continue }
|
|
if ($paramKey -eq 'CreateRestorePoint') { continue }
|
|
$actionableKeys += $paramKey
|
|
}
|
|
|
|
$totalSteps = $actionableKeys.Count
|
|
if ($script:Params.ContainsKey("CreateRestorePoint")) { $totalSteps++ }
|
|
$currentStep = 0
|
|
|
|
# Create restore point if requested (CLI only - GUI handles this separately)
|
|
if ($script:Params.ContainsKey("CreateRestorePoint")) {
|
|
$currentStep++
|
|
if ($script:ApplyProgressCallback) {
|
|
& $script:ApplyProgressCallback $currentStep $totalSteps "Creating system restore point"
|
|
}
|
|
Write-Host "> Attempting to create a system restore point..."
|
|
CreateSystemRestorePoint
|
|
Write-Host ""
|
|
}
|
|
|
|
# Execute all parameters
|
|
foreach ($paramKey in $actionableKeys) {
|
|
if ($script:CancelRequested) {
|
|
return
|
|
}
|
|
|
|
$currentStep++
|
|
|
|
# Get friendly name for the step
|
|
$stepName = $paramKey
|
|
if ($script:Features.ContainsKey($paramKey)) {
|
|
$feature = $script:Features[$paramKey]
|
|
if ($feature.ApplyText) {
|
|
# Prefer explicit ApplyText when provided
|
|
$stepName = $feature.ApplyText
|
|
} elseif ($feature.Label) {
|
|
# Fallback: construct a name from Action and Label, or just Label
|
|
if ($feature.Action) {
|
|
$stepName = "$($feature.Action) $($feature.Label)"
|
|
} else {
|
|
$stepName = $feature.Label
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($script:ApplyProgressCallback) {
|
|
& $script:ApplyProgressCallback $currentStep $totalSteps $stepName
|
|
}
|
|
|
|
ExecuteParameter -paramKey $paramKey
|
|
}
|
|
} |