diff --git a/Remove-LenovoBloat.ps1 b/Remove-LenovoBloat.ps1 new file mode 100644 index 0000000..35d580e --- /dev/null +++ b/Remove-LenovoBloat.ps1 @@ -0,0 +1,98 @@ +# Remove Lenovo Bloatware - Silent mode with error suppression +# Run as Administrator + +#Requires -RunAsAdministrator + +$ErrorActionPreference = 'SilentlyContinue' +$ProgressPreference = 'SilentlyContinue' + +# Lenovo Bloatware packages to remove +$LenovoApps = @( + 'Lenovo.*Settings', + 'Lenovo.*Vantage', + 'Lenovo.*Companion', + 'Lenovo.*PowerManagement', + 'Lenovo.*SystemUpdate', + 'Lenovo.*UltraCharger', + 'Lenovo.*Battery', + 'Lenovo.*Nerve', + 'Lenovo.*FusionEngine', + 'Lenovo.*OneKey.*Theater', + 'Lenovo.*OneKey.*Optimizer', + 'LenovoLauncher', + 'LenovoEasyCamera', + 'PSREF', + 'McAfee.*' +) + +# Remove via WMI +foreach ($app in $LenovoApps) { + try { + $installed = Get-WmiObject -Class Win32_Product -Filter "Name LIKE '$app'" -ErrorAction SilentlyContinue + foreach ($item in $installed) { + $item.Uninstall() | Out-Null + } + } catch { } +} + +# Remove via PowerShell App Removal +foreach ($app in $LenovoApps) { + try { + Get-AppxPackage -Name "*Lenovo*" -AllUsers -ErrorAction SilentlyContinue | Remove-AppxPackage -AllUsers + } catch { } +} + +# Remove Lenovo services +$LenovoServices = @( + 'LenovoCOMSvc', + 'LenovoUpdate', + 'LenovoWifiDisplayService', + 'lolmsvc', + 'LENOVO', + 'LenovoEasyPlus' +) + +foreach ($service in $LenovoServices) { + try { + $svc = Get-Service -Name $service -ErrorAction SilentlyContinue + if ($svc) { + Stop-Service -Name $service -Force + Set-Service -Name $service -StartupType Disabled + } + } catch { } +} + +# Remove Lenovo scheduled tasks +try { + Get-ScheduledTask -TaskPath "*Lenovo*" -ErrorAction SilentlyContinue | Unregister-ScheduledTask -Confirm:$false +} catch { } + +# Remove from Registry +try { + $LenovoRegPaths = @( + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*Lenovo*', + 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\*Lenovo*', + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\*Lenovo*' + ) + + foreach ($path in $LenovoRegPaths) { + Remove-Item -Path $path -Force -Recurse + } +} catch { } + +# Remove Lenovo installation directories +$LenovoDirs = @( + 'C:\Program Files\Lenovo', + 'C:\Program Files (x86)\Lenovo', + 'C:\ProgramData\Lenovo' +) + +foreach ($dir in $LenovoDirs) { + try { + if (Test-Path $dir) { + Remove-Item -Path $dir -Recurse -Force + } + } catch { } +} + +Write-Host "Lenovo bloatware removal complete." -ForegroundColor Green diff --git a/Run-AllBloat.bat b/Run-AllBloat.bat new file mode 100644 index 0000000..19e08bd --- /dev/null +++ b/Run-AllBloat.bat @@ -0,0 +1,21 @@ +@echo off +REM Silent bloatware removal batch wrapper +REM Run as Administrator + +setlocal enabledelayedexpansion +set "SCRIPT_DIR=%~dp0" + +REM Check for admin rights +net session >nul 2>&1 +if %errorlevel% neq 0 ( + echo This script requires Administrator privileges. + echo Attempting to elevate... + powershell -Command "Start-Process cmd -ArgumentList '/c %~0' -Verb RunAs" >nul 2>&1 + exit /b +) + +REM Run the main bloatware removal script silently +powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "%SCRIPT_DIR%Remove-AllBloat.ps1" >nul 2>&1 + +REM Silent exit +exit /b 0 diff --git a/Scan-Bloatware.ps1 b/Scan-Bloatware.ps1 new file mode 100644 index 0000000..9681c23 --- /dev/null +++ b/Scan-Bloatware.ps1 @@ -0,0 +1,241 @@ +# Scan for bloatware without removing - Report what WOULD be removed +# Run as Administrator (recommended for full results) + +#Requires -RunAsAdministrator + +param( + [Parameter(Mandatory=$false)] + [ValidateSet('All', 'HP', 'Lenovo', 'ASUS', 'Dell')] + [string]$Manufacturer = 'All' +) + +$ErrorActionPreference = 'SilentlyContinue' +$ProgressPreference = 'SilentlyContinue' + +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "Bloatware Scan Report" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "Manufacturer Filter: $Manufacturer" +Write-Host "Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" +Write-Host "" + +# Define what to look for +$Patterns = @{ + "HP" = @( + 'HP.*Support.*Assistant', 'HP.*Alerts', 'HPControlledShutdown', 'HP.*Cloud.*Recover', + 'HP.*Client.*Services', 'HP.*Quickdrop', 'HP.*Photo.*Creations', 'HP.*Security.*Update', + 'HPIASystemAgent', 'HP.*Wireless.*Assistant', 'HP.*Print.*Library', 'HPDeskjet.*', + 'HPOfficejet.*', 'HPPhotosmart.*', 'HPEnvy.*', 'HPLaserJet.*' + ) + "Lenovo" = @( + 'Lenovo.*Settings', 'Lenovo.*Vantage', 'Lenovo.*Companion', 'Lenovo.*PowerManagement', + 'Lenovo.*SystemUpdate', 'Lenovo.*UltraCharger', 'Lenovo.*Battery', 'Lenovo.*Nerve', + 'Lenovo.*FusionEngine', 'Lenovo.*OneKey.*Theater', 'Lenovo.*OneKey.*Optimizer', + 'LenovoLauncher', 'LenovoEasyCamera', 'PSREF' + ) + "ASUS" = @( + 'ASUS.*Live.*Update', 'ASUS.*WebStorage', 'ASUS.*Gamer.*OSD', 'ASUS.*Ambient', + 'ASUS.*FX', 'ASUS.*Splendid', 'ASUS.*Smart.*Gesture', 'ASUS.*Safe.*Face', + 'ASUS.*Keyboard', 'ASUS.*Touchpad', 'ASUS.*Turbo', 'ASUS.*GameVisual', + 'ASUS.*Controller', 'ASUSSMS', 'ASUS.*Sonic.*Studio' + ) + "Dell" = @( + 'Dell.*Update', 'DellSystemDetect', 'DellClientManagementService', 'Dell.*Backup', + 'Dell.*Dock', 'Dell.*Display.*Manager', 'Dell.*Easy.*Access', 'Dell.*Foundation.*Services', + 'Dell.*SupportAssist', 'Dell.*SupportAssistRemediation', 'Dell.*Optimizer', 'DellPowerManager', + 'Dell.*Command.*Update', 'Alienware.*' + ) +} + +$GlobalResults = @{ + InstalledApps = @() + Services = @() + ScheduledTasks = @() + Directories = @() + RegistryEntries = @() + AppxPackages = @() +} + +$MfgsToCheck = if ($Manufacturer -eq 'All') { $Patterns.Keys } else { @($Manufacturer) } + +# ==================== INSTALLED APPLICATIONS ==================== +Write-Host "[*] INSTALLED APPLICATIONS" -ForegroundColor Yellow +Write-Host "-" * 40 + +$AppCount = 0 +foreach ($Mfg in $MfgsToCheck) { + $MfgCount = 0 + Write-Host "" + Write-Host " $Mfg:" -ForegroundColor Cyan + + foreach ($Pattern in $Patterns[$Mfg]) { + try { + $Apps = Get-WmiObject -Class Win32_Product -Filter "Name LIKE '$Pattern'" -ErrorAction SilentlyContinue + if ($Apps) { + foreach ($App in $Apps) { + Write-Host " - $($App.Name)" -ForegroundColor Red + Write-Host " Version: $($App.Version)" + Write-Host " Installed: $($App.InstallDate)" + $GlobalResults.InstalledApps += @{Manufacturer = $Mfg; Name = $App.Name; Version = $App.Version } + $MfgCount++ + $AppCount++ + } + } + } catch { } + } + + if ($MfgCount -eq 0) { + Write-Host " [+] None found" -ForegroundColor Green + } +} + +# ==================== APPX PACKAGES ==================== +Write-Host "" +Write-Host "[*] APPX PACKAGES (Windows Store Apps)" -ForegroundColor Yellow +Write-Host "-" * 40 + +$AppxCount = 0 +foreach ($Mfg in $MfgsToCheck) { + $MfgAppx = Get-AppxPackage -Name "*$Mfg*" -AllUsers -ErrorAction SilentlyContinue + if ($MfgAppx) { + Write-Host "" + Write-Host " $Mfg:" -ForegroundColor Cyan + foreach ($App in $MfgAppx) { + Write-Host " - $($App.Name)" -ForegroundColor Red + $GlobalResults.AppxPackages += @{Manufacturer = $Mfg; Name = $App.Name } + $AppxCount++ + } + } +} + +if ($AppxCount -eq 0) { + Write-Host " [+] No AppxPackages found" -ForegroundColor Green +} + +# ==================== SERVICES ==================== +Write-Host "" +Write-Host "[*] SERVICES" -ForegroundColor Yellow +Write-Host "-" * 40 + +$ServicePatterns = @{ + "HP" = @('hpsysdrv', 'HPDrvMaintSvc') + "Lenovo" = @('LenovoCOMSvc', 'LenovoUpdate', 'LenovoWifiDisplayService', 'lolmsvc', 'LenovoEasyPlus') + "ASUS" = @('ASUSLinkNear', 'ASUSLinkRemote', 'ASUSWebStorage', 'ASUSGiftBox', 'ArmouryCrate', 'asComSvc') + "Dell" = @('DellClientManagementService', 'DellSystemDetect', 'DSAService', 'DellDataTransport', 'DellSSDMonitor') +} + +$ServiceCount = 0 +foreach ($Mfg in $MfgsToCheck) { + $MfgServices = 0 + Write-Host "" + Write-Host " $Mfg:" -ForegroundColor Cyan + + foreach ($ServiceName in $ServicePatterns[$Mfg]) { + try { + $Svc = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue + if ($Svc) { + $Status = $Svc.Status + $Color = if ($Status -eq 'Running') { 'Red' } else { 'Yellow' } + Write-Host " - $($Svc.Name) [$Status]" -ForegroundColor $Color + Write-Host " Display Name: $($Svc.DisplayName)" + $GlobalResults.Services += @{Manufacturer = $Mfg; Name = $Svc.Name; Status = $Status } + $MfgServices++ + $ServiceCount++ + } + } catch { } + } + + if ($MfgServices -eq 0) { + Write-Host " [+] No services found" -ForegroundColor Green + } +} + +# ==================== SCHEDULED TASKS ==================== +Write-Host "" +Write-Host "[*] SCHEDULED TASKS" -ForegroundColor Yellow +Write-Host "-" * 40 + +$TaskCount = 0 +foreach ($Mfg in $MfgsToCheck) { + $MfgTasks = Get-ScheduledTask -TaskPath "*$Mfg*" -ErrorAction SilentlyContinue + if ($MfgTasks) { + Write-Host "" + Write-Host " $Mfg:" -ForegroundColor Cyan + foreach ($Task in $MfgTasks) { + Write-Host " - $($Task.TaskName)" -ForegroundColor Red + Write-Host " Path: $($Task.TaskPath)" + Write-Host " State: $($Task.State)" + $GlobalResults.ScheduledTasks += @{Manufacturer = $Mfg; Name = $Task.TaskName; Path = $Task.TaskPath } + $TaskCount++ + } + } +} + +if ($TaskCount -eq 0) { + Write-Host " [+] No scheduled tasks found" -ForegroundColor Green +} + +# ==================== DIRECTORIES ==================== +Write-Host "" +Write-Host "[*] INSTALLATION DIRECTORIES" -ForegroundColor Yellow +Write-Host "-" * 40 + +$DirPatterns = @{ + "HP" = @('C:\Program Files\HP', 'C:\Program Files (x86)\HP', 'C:\Program Files\Hewlett-Packard', 'C:\Program Files (x86)\Hewlett-Packard') + "Lenovo" = @('C:\Program Files\Lenovo', 'C:\Program Files (x86)\Lenovo', 'C:\ProgramData\Lenovo') + "ASUS" = @('C:\Program Files\ASUS', 'C:\Program Files (x86)\ASUS', 'C:\ProgramData\ASUS') + "Dell" = @('C:\Program Files\Dell', 'C:\Program Files (x86)\Dell', 'C:\ProgramData\Dell', 'C:\ProgramData\SupportAssist') +} + +$DirCount = 0 +foreach ($Mfg in $MfgsToCheck) { + $MfgDirs = 0 + Write-Host "" + Write-Host " $Mfg:" -ForegroundColor Cyan + + foreach ($Dir in $DirPatterns[$Mfg]) { + if (Test-Path $Dir) { + $Size = (Get-ChildItem -Path $Dir -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum + $SizeGB = [math]::Round($Size / 1GB, 2) + Write-Host " - $Dir" -ForegroundColor Red + Write-Host " Size: $SizeGB GB" + $GlobalResults.Directories += @{Manufacturer = $Mfg; Path = $Dir; SizeGB = $SizeGB } + $MfgDirs++ + $DirCount++ + } + } + + if ($MfgDirs -eq 0) { + Write-Host " [+] No directories found" -ForegroundColor Green + } +} + +# ==================== SUMMARY ==================== +Write-Host "" +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "SUMMARY" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" +Write-Host "Total Items Found:" -ForegroundColor Cyan +Write-Host " Installed Applications: $AppCount" -ForegroundColor $(if ($AppCount -gt 0) { 'Red' } else { 'Green' }) +Write-Host " AppxPackages: $AppxCount" -ForegroundColor $(if ($AppxCount -gt 0) { 'Red' } else { 'Green' }) +Write-Host " Services: $ServiceCount" -ForegroundColor $(if ($ServiceCount -gt 0) { 'Red' } else { 'Green' }) +Write-Host " Scheduled Tasks: $TaskCount" -ForegroundColor $(if ($TaskCount -gt 0) { 'Red' } else { 'Green' }) +Write-Host " Directories: $DirCount" -ForegroundColor $(if ($DirCount -gt 0) { 'Red' } else { 'Green' }) +Write-Host "" + +$TotalItems = $AppCount + $AppxCount + $ServiceCount + $TaskCount + $DirCount + +if ($TotalItems -eq 0) { + Write-Host "[+] CLEAN: No bloatware detected!" -ForegroundColor Green +} else { + Write-Host "[-] BLOATWARE DETECTED: $TotalItems items" -ForegroundColor Red + Write-Host "" + Write-Host "Next Steps:" -ForegroundColor Yellow + Write-Host " 1. Review items above" + Write-Host " 2. Run: powershell -ExecutionPolicy Bypass -File 'Remove-AllBloat.ps1'" + Write-Host " 3. Verify with: powershell -ExecutionPolicy Bypass -File 'Verify-Removal.ps1'" +} + +Write-Host "" +Write-Host "[*] Scan complete." diff --git a/Verify-Removal.ps1 b/Verify-Removal.ps1 new file mode 100644 index 0000000..00de006 --- /dev/null +++ b/Verify-Removal.ps1 @@ -0,0 +1,164 @@ +# Verify bloatware removal - Check what's still installed +# Run as Administrator (recommended for full results) + +#Requires -RunAsAdministrator + +$ErrorActionPreference = 'SilentlyContinue' +$ProgressPreference = 'SilentlyContinue' + +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "Bloatware Verification Report" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" + +# Define what to look for +$Manufacturers = @{ + "HP" = @( + 'HP.*Support.*Assistant', 'HP.*Alerts', 'HPControlledShutdown', 'HP.*Cloud.*Recover', + 'HP.*Client.*Services', 'HP.*Quickdrop', 'HP.*Photo.*Creations', 'HP.*Security.*Update', + 'HPIASystemAgent', 'HP.*Wireless.*Assistant', 'HP.*Print.*Library' + ) + "Lenovo" = @( + 'Lenovo.*Settings', 'Lenovo.*Vantage', 'Lenovo.*Companion', 'Lenovo.*PowerManagement', + 'Lenovo.*SystemUpdate', 'Lenovo.*UltraCharger', 'Lenovo.*Battery', 'LenovoLauncher' + ) + "ASUS" = @( + 'ASUS.*Live.*Update', 'ASUS.*WebStorage', 'ASUS.*Gamer.*OSD', 'ASUS.*Ambient', + 'ASUS.*FX', 'ASUS.*Splendid', 'ASUS.*Smart.*Gesture', 'ASUS.*Turbo' + ) + "Dell" = @( + 'Dell.*Update', 'DellSystemDetect', 'DellClientManagementService', 'Dell.*Backup', + 'Dell.*Dock', 'Dell.*Display.*Manager', 'Dell.*SupportAssist', 'Dell.*Optimizer' + ) +} + +$TotalFound = 0 + +# Check installed applications +Write-Host "[*] Checking installed applications..." -ForegroundColor Yellow +Write-Host "" + +foreach ($Mfg in $Manufacturers.Keys) { + $MfgFound = 0 + Write-Host " $Mfg:" -ForegroundColor Cyan + + foreach ($Pattern in $Manufacturers[$Mfg]) { + try { + $Apps = Get-WmiObject -Class Win32_Product -Filter "Name LIKE '$Pattern'" -ErrorAction SilentlyContinue + if ($Apps) { + foreach ($App in $Apps) { + Write-Host " [-] $($App.Name)" -ForegroundColor Red + $MfgFound++ + $TotalFound++ + } + } + } catch { } + } + + if ($MfgFound -eq 0) { + Write-Host " [+] No bloatware found" -ForegroundColor Green + } + + Write-Host "" +} + +# Check AppxPackages +Write-Host "[*] Checking AppxPackages..." -ForegroundColor Yellow +Write-Host "" + +$AppxFound = 0 +foreach ($Mfg in @('HP', 'Lenovo', 'ASUS', 'Dell')) { + $MfgApps = Get-AppxPackage -Name "*$Mfg*" -AllUsers -ErrorAction SilentlyContinue + if ($MfgApps) { + Write-Host " $Mfg:" -ForegroundColor Cyan + foreach ($App in $MfgApps) { + Write-Host " [-] $($App.Name)" -ForegroundColor Red + $AppxFound++ + $TotalFound++ + } + } +} + +if ($AppxFound -eq 0) { + Write-Host " [+] No AppxPackages found" -ForegroundColor Green +} + +Write-Host "" + +# Check Services +Write-Host "[*] Checking active services..." -ForegroundColor Yellow +Write-Host "" + +$Services = @( + 'hpsysdrv', 'HPDrvMaintSvc', 'LenovoCOMSvc', 'LenovoUpdate', 'ASUSLinkNear', + 'ASUSLinkRemote', 'ASUSWebStorage', 'DellClientManagementService', 'DellSystemDetect' +) + +$ActiveServices = 0 +foreach ($Service in $Services) { + try { + $Svc = Get-Service -Name $Service -ErrorAction SilentlyContinue + if ($Svc -and $Svc.Status -eq 'Running') { + Write-Host " [-] $Service (Running)" -ForegroundColor Red + $ActiveServices++ + $TotalFound++ + } + } catch { } +} + +if ($ActiveServices -eq 0) { + Write-Host " [+] No bloatware services running" -ForegroundColor Green +} + +Write-Host "" + +# Check directories +Write-Host "[*] Checking installation directories..." -ForegroundColor Yellow +Write-Host "" + +$Directories = @( + 'C:\Program Files\HP', + 'C:\Program Files (x86)\HP', + 'C:\Program Files\Lenovo', + 'C:\Program Files (x86)\Lenovo', + 'C:\Program Files\ASUS', + 'C:\Program Files (x86)\ASUS', + 'C:\Program Files\Dell', + 'C:\Program Files (x86)\Dell' +) + +$DirsFound = 0 +foreach ($Dir in $Directories) { + if (Test-Path $Dir) { + Write-Host " [-] $Dir" -ForegroundColor Red + $DirsFound++ + $TotalFound++ + } +} + +if ($DirsFound -eq 0) { + Write-Host " [+] No bloatware directories found" -ForegroundColor Green +} + +Write-Host "" + +# Summary +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "Summary" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan + +if ($TotalFound -eq 0) { + Write-Host "[+] CLEAN: No bloatware detected" -ForegroundColor Green + Write-Host "" + Write-Host "All manufacturer bloatware has been successfully removed." +} else { + Write-Host "[-] BLOATWARE DETECTED: $TotalFound items found" -ForegroundColor Red + Write-Host "" + Write-Host "Some bloatware remains. Consider:" + Write-Host " 1. Running Remove-AllBloat.ps1 again" + Write-Host " 2. Manually uninstalling items from Control Panel" + Write-Host " 3. Checking if items are protected system files" +} + +Write-Host "" +Write-Host "[*] Verification complete."