scripts/bleachbit.ps1
2026-02-21 14:42:45 +01:00

205 lines
No EOL
6.1 KiB
PowerShell

# BleachBit Script
# Downloads BleachBit portable, extracts it, and runs specified cleaners
param(
# Array of cleaners to run - can be customized for different use cases
[string[]]$Cleaners = @(
"adobe_reader.cache",
"adobe_reader.mru",
"adobe_reader.tmp",
"amule.known_clients",
"amule.known_files",
"amule.logs",
"amule.temp",
"brave.cache",
"chromium.cache",
"chromium.vacuum",
"deepscan.backup",
"deepscan.ds_store",
"deepscan.thumbs_db",
"deepscan.tmp",
"deepscan.vim_swap_root",
"deepscan.vim_swap_user",
"discord.cache",
"discord.vacuum",
"filezilla.mru",
"firefox.cache",
"firefox.crash_reports",
"firefox.url_history",
"flash.cache",
"flash.cookies",
"gimp.tmp",
"google_chrome.cache",
"google_earth.temporary_files",
"google_toolbar.search_history",
"gpodder.cache",
"gpodder.logs",
"hexchat.logs",
"hippo_opensim_viewer.cache",
"internet_explorer.cache",
"java.cache",
"libreoffice.history",
"microsoft_edge.cache",
"microsoft_office.debug_logs",
"microsoft_office.mru",
"midnightcommander.history",
"miro.cache",
"miro.logs",
"octave.history",
"openofficeorg.cache",
"openofficeorg.recent_documents",
"opera.cache",
"paint.mru",
"palemoon.cache",
"pidgin.cache",
"pidgin.logs",
"realplayer.logs",
"safari.cache",
"screenlets.logs",
"seamonkey.cache",
"secondlife_viewer.cache",
"secondlife_viewer.logs",
"silverlight.temp",
"skype.installers",
"slack.cache",
"smartftp.cache",
"smartftp.log",
"smartftp.mru",
"system.recycle_bin",
"system.tmp",
"system.updates",
"teamviewer.logs",
"teamviewer.mru",
"thunderbird.cache",
"vim.history",
"vlc.memory_dump",
"vlc.mru",
"vuze.cache",
"vuze.logs",
"vuze.stats",
"vuze.temp",
"warzone2100.logs",
"waterfox.cache",
"winamp.mru",
"windows_defender.backup",
"windows_defender.history",
"windows_defender.logs",
"windows_defender.quarantine",
"windows_defender.temp",
"windows_explorer.mru",
"windows_explorer.run",
"windows_explorer.search_history",
"windows_explorer.shellbags",
"windows_explorer.thumbnails",
"windows_media_player.cache",
"windows_media_player.mru",
"winrar.history",
"winrar.temp",
"winzip.mru",
"wordpad.mru",
"yahoo_messenger.cache",
"yahoo_messenger.chat_logs",
"yahoo_messenger.logs",
"zoom.cache",
"zoom.logs"
),
# Download URL - can be overridden for different versions
[string]$DownloadURL = "https://download.bleachbit.org/BleachBit-5.0.2-portable.zip",
# Installation path
[string]$InstallPath = "C:\Quest\BleachBit"
)
# Set strict mode
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
try {
# Create installation directory if it doesn't exist
if (-not (Test-Path $InstallPath)) {
New-Item -Path $InstallPath -ItemType Directory -Force | Out-Null
}
$zipPath = "$InstallPath\BleachBit-5.0.2-portable.zip"
$exePath = "$InstallPath\Bleachbit-Portable\bleachbit_console.exe"
# Download BleachBit if not already present
if (-not (Test-Path $zipPath)) {
Write-Host "Downloading BleachBit..."
Invoke-WebRequest -Uri $DownloadURL -OutFile $zipPath -UseBasicParsing
Write-Host "Download complete."
}
# Extract if executable doesn't exist
if (-not (Test-Path $exePath)) {
Write-Host "Extracting BleachBit..."
# Use Expand-Archive for extraction (built-in since PowerShell 5.0)
$tempExtractPath = "$env:TEMP\BleachBit_Extract"
if (Test-Path $tempExtractPath) {
Remove-Item -Path $tempExtractPath -Recurse -Force
}
Expand-Archive -Path $zipPath -DestinationPath $tempExtractPath -Force
# Move contents to install path
$extractedContent = Get-ChildItem -Path $tempExtractPath -Recurse
foreach ($item in $extractedContent) {
$destination = $item.FullName.Replace($tempExtractPath, $InstallPath)
if ($item.PSIsContainer) {
if (-not (Test-Path $destination)) {
New-Item -Path $destination -ItemType Directory -Force | Out-Null
}
} else {
$parentDir = Split-Path $destination -Parent
if (-not (Test-Path $parentDir)) {
New-Item -Path $parentDir -ItemType Directory -Force | Out-Null
}
Move-Item -Path $item.FullName -Destination $destination -Force
}
}
# Clean up temp extraction
Remove-Item -Path $tempExtractPath -Recurse -Force
Write-Host "Extraction complete."
}
# Verify executable exists
if (-not (Test-Path $exePath)) {
throw "BleachBit executable not found at: $exePath"
}
# Build the cleaner string
$cleanerString = $Cleaners -join " "
Write-Host "Running BleachBit cleaners..."
Write-Host "Cleaners: $cleanerString"
# Run BleachBit with the specified cleaners
$output = & $exePath --clean $cleanerString 2>&1
# Return success response as JSON
$result = @{
success = $true
cleaners = $Cleaners
output = $output
message = "BleachBit cleanup completed successfully"
} | ConvertTo-Json -Compress
Write-Output $result
}
catch {
# Return error response as JSON
$errorResult = @{
success = $false
error = $_.Exception.Message
cleaners = $Cleaners
} | ConvertTo-Json -Compress
Write-Error $errorResult
Write-Output $errorResult
}