# Deploy bloatware removal as scheduled task - runs silently at startup or on schedule # Run as Administrator #Requires -RunAsAdministrator param( [Parameter(Mandatory=$false)] [ValidateSet('Startup', 'Weekly', 'Monthly')] [string]$Trigger = 'Startup', [Parameter(Mandatory=$false)] [string]$ScriptPath = (Split-Path -Parent $MyInvocation.MyCommand.Path) + '\Remove-AllBloat.ps1' ) $ErrorActionPreference = 'SilentlyContinue' # Task details $TaskName = "Remove Bloatware - Silent" $TaskPath = "\Maintenance\" $Description = "Silently remove manufacturer bloatware (HP, Lenovo, ASUS, Dell)" Write-Host "[*] Creating scheduled task for bloatware removal..." # Create action $Action = New-ScheduledTaskAction ` -Execute "powershell.exe" ` -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$ScriptPath`" -ErrorAction SilentlyContinue" # Create trigger based on parameter if ($Trigger -eq 'Startup') { $TaskTrigger = New-ScheduledTaskTrigger -AtStartup Write-Host "[+] Trigger: At System Startup" } elseif ($Trigger -eq 'Weekly') { $TaskTrigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 2:00AM Write-Host "[+] Trigger: Weekly (Sunday 2:00 AM)" } else { $TaskTrigger = New-ScheduledTaskTrigger -Monthly -DaysOfMonth 1 -At 2:00AM Write-Host "[+] Trigger: Monthly (1st of month at 2:00 AM)" } # Create principal (run with highest privileges) $Principal = New-ScheduledTaskPrincipal ` -UserId "SYSTEM" ` -RunLevel Highest ` -ProcessTokenSidType Default # Create settings $Settings = New-ScheduledTaskSettingsSet ` -AllowStartIfOnBatteries ` -DontStopIfGoingOnBatteries ` -StartWhenAvailable ` -RunOnlyIfNetworkAvailable $false ` -MultipleInstances IgnoreNew # Register the task try { # Remove existing task if it exists Unregister-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -Confirm:$false -ErrorAction SilentlyContinue Register-ScheduledTask ` -TaskName $TaskName ` -TaskPath $TaskPath ` -Action $Action ` -Trigger $TaskTrigger ` -Principal $Principal ` -Settings $Settings ` -Description $Description ` -Force | Out-Null Write-Host "[+] Scheduled task created successfully." Write-Host "[+] Task will run: $Trigger" Write-Host "[+] Script: $ScriptPath" } catch { Write-Host "[-] Error creating task: $_" -ForegroundColor Red exit 1 } # Verify task was created $Task = Get-ScheduledTask -TaskName $TaskName -TaskPath $TaskPath -ErrorAction SilentlyContinue if ($Task) { Write-Host "[+] Task verified and ready." Write-Host "" Write-Host "Task Details:" Write-Host " - Name: $($Task.TaskName)" Write-Host " - Path: $($Task.TaskPath)" Write-Host " - Status: $($Task.State)" } else { Write-Host "[-] Failed to verify task creation." -ForegroundColor Red exit 1 } Write-Host "" Write-Host "[+] Deployment complete!"