Add pending reboot handling, Windows Update cleanup, disk space reporting, and browser cache cleanup

- Get-DiskSpaceInfo: Returns disk space info for before/after comparison
- Clear-WindowsUpdateFiles: Removes SoftwareDistribution, WinSxS backup files
- Clear-BrowserCaches: Clears Chrome, Firefox, Edge caches for all users
- Disk cleanup now reports space freed per drive
- Updated menu with option 9 for browser cache cleanup
- Full remediation now includes all new cleanup functions
This commit is contained in:
Kevin Simmons committed 2026-10-04 15:19:31 -05:00
1 parent 731227dabe
commit d3612914e7
1 file changed
+138 -3
+138 -3
View File
@@ -6,7 +6,8 @@ PC Remediation & Cleanup - Remote Edition
.DESCRIPTION
This script provides targeted manual remediation tools to free up disk space, restart stopped
critical services, clear update caches, purge temporary logs, and handle pending reboot flags.
critical services, clear update caches, purge temporary logs, handle pending reboot flags,
clean browser caches, and report disk space changes.
Compatible with Windows PowerShell 5.1 and supports local/remote CIM sessions (DCOM and WinRM).
@@ -215,7 +216,8 @@ function Show-Menu {
Write-Host "6. Empty Recycle Bin (All Users)" -ForegroundColor White
Write-Host "7. Run Component Store Cleanup (DISM)" -ForegroundColor White
Write-Host "8. Run Disk Cleanup (cleanmgr)" -ForegroundColor White
Write-Host "9. Execute Full System Remediation (All Items)" -ForegroundColor Green
Write-Host "9. Clear Browser Caches" -ForegroundColor White
Write-Host "10. Execute Full System Remediation (All Items)" -ForegroundColor Green
Write-Host "Q. Quit" -ForegroundColor Red
}
}
@@ -507,6 +509,136 @@ Start-Process -FilePath "cleanmgr.exe" -ArgumentList "/sagerun:1" -Wait -WindowS
}
}
function Get-DiskSpaceInfo {
param ([string]$TargetComputer = $env:COMPUTERNAME, [Microsoft.Management.Infrastructure.CimSession]$CimSession = $null)
if (-not $CimSession -and $TargetComputer -eq $env:COMPUTERNAME) {
$disks = Get-PSDrive -PSProvider FileSystem |
Select-Object Name,
@{Name="FreeSpace(GB)";Expression={[math]::Round($_.Free/1GB, 2)}},
@{Name="TotalSpace(GB)";Expression={[math]::Round(($_.Used/1GB + $_.Free/1GB), 2)}},
@{Name="PercentFree";Expression={[math]::Round(($_.Free/($_.Used + $_.Free))*100, 2)}}
} else {
$disks = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" -CimSession $CimSession |
Select-Object DeviceID,
@{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB, 2)}},
@{Name="TotalSpace(GB)";Expression={[math]::Round(($_.FreeSpace/1GB + $_.Size/1GB), 2)}},
@{Name="PercentFree";Expression={[math]::Round(($_.FreeSpace/($_.FreeSpace + $_.Size))*100, 2)}}
}
return $disks
}
function Clear-WindowsUpdateFiles {
param ([string]$TargetComputer = $env:COMPUTERNAME, [Microsoft.Management.Infrastructure.CimSession]$CimSession = $null)
Write-ColorOutput "`nCleaning Windows Update Files..." "Yellow" "Info" $TargetComputer
try {
$beforeSpace = Get-DiskSpaceInfo -TargetComputer $TargetComputer -CimSession $CimSession
if (-not $CimSession -and $TargetComputer -eq $env:COMPUTERNAME) {
Stop-Service -Name "wuauserv", "bits" -Force -ErrorAction SilentlyContinue
$updatePaths = @(
"$env:SystemRoot\SoftwareDistribution\Download\*",
"$env:SystemRoot\SoftwareDistribution\DataStore\*",
"$env:SystemRoot\SoftwareDistribution\Backup\*"
)
foreach ($path in $updatePaths) {
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
}
$oldUpdates = "$env:SystemRoot\WinSxS\Backup\*"
if (Test-Path $oldUpdates) {
Remove-Item -Path $oldUpdates -Recurse -Force -ErrorAction SilentlyContinue
}
Start-Service -Name "wuauserv", "bits" -ErrorAction SilentlyContinue
} else {
$scriptBlock = @"
Stop-Service -Name 'wuauserv', 'bits' -Force -ErrorAction SilentlyContinue
`$updatePaths = @('$env:SystemRoot\SoftwareDistribution\Download\*', '$env:SystemRoot\SoftwareDistribution\DataStore\*', '$env:SystemRoot\SoftwareDistribution\Backup\*')
foreach (`$path in `$updatePaths) {
Remove-Item -Path `$path -Recurse -Force -ErrorAction SilentlyContinue
}
`$oldUpdates = '$env:SystemRoot\WinSxS\Backup\*'
if (Test-Path `$oldUpdates) {
Remove-Item -Path `$oldUpdates -Recurse -Force -ErrorAction SilentlyContinue
}
Start-Service -Name 'wuauserv', 'bits' -ErrorAction SilentlyContinue
"@
Invoke-CimMethod -CimSession $CimSession -ClassName Win32_Process -MethodName Create -Arguments @{
CommandLine = "powershell.exe -Command `$scriptBlock"
} | Out-Null
}
$afterSpace = Get-DiskSpaceInfo -TargetComputer $TargetComputer -CimSession $CimSession
foreach ($disk in $beforeSpace) {
$before = $disk.'FreeSpace(GB)'
$after = ($afterSpace | Where-Object { $_.Name -eq $disk.Name }).'FreeSpace(GB)'
$freed = [math]::Round($after - $before, 2)
Write-ColorOutput "Drive $($disk.Name): Freed $freed GB (was $before GB, now $after GB free)" "Green" "Good" $TargetComputer
}
Write-ColorOutput "Windows Update files cleaned successfully." "Green" "Good" $TargetComputer
} catch {
Write-ColorOutput "Failed to clean Windows Update files: $_" "Red" "Critical" $TargetComputer
}
}
function Clear-BrowserCaches {
param ([string]$TargetComputer = $env:COMPUTERNAME, [Microsoft.Management.Infrastructure.CimSession]$CimSession = $null)
Write-ColorOutput "`nClearing Browser Caches..." "Yellow" "Info" $TargetComputer
try {
if (-not $CimSession -and $TargetComputer -eq $env:COMPUTERNAME) {
$userProfiles = Get-ChildItem -Path "C:\Users" -Directory -ErrorAction SilentlyContinue
foreach ($profile in $userProfiles) {
$username = $profile.Name
$chromeCache = "$($profile.FullName)\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
$chromeCodeCache = "$($profile.FullName)\AppData\Local\Google\Chrome\User Data\Default\Code Cache\*"
$firefoxCache = "$($profile.FullName)\AppData\Local\Mozilla\Firefox\Profiles\*\cache*"
$edgeCache = "$($profile.FullName)\AppData\Local\Microsoft\Edge\User Data\Default\Cache\*"
foreach ($path in @($chromeCache, $chromeCodeCache, $firefoxCache, $edgeCache)) {
if (Test-Path $path) {
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
}
}
Write-ColorOutput " Cleared browser caches for user: $username" "White" "Info" $TargetComputer
}
} else {
$scriptBlock = @"
`$userProfiles = Get-ChildItem -Path 'C:\Users' -Directory -ErrorAction SilentlyContinue
foreach (`$profile in `$userProfiles) {
`$username = `$profile.Name
`$chromeCache = "`$(`$profile.FullName)\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
`$chromeCodeCache = "`$(`$profile.FullName)\AppData\Local\Google\Chrome\User Data\Default\Code Cache\*"
`$firefoxCache = "`$(`$profile.FullName)\AppData\Local\Mozilla\Firefox\Profiles\*\cache*"
`$edgeCache = "`$(`$profile.FullName)\AppData\Local\Microsoft\Edge\User Data\Default\Cache\*"
foreach (`$path in @(`$chromeCache, `$chromeCodeCache, `$firefoxCache, `$edgeCache)) {
if (Test-Path `$path) {
Remove-Item -Path `$path -Recurse -Force -ErrorAction SilentlyContinue
}
}
Write-Host " Cleared browser caches for user: `$username" -ForegroundColor White
}
"@
Invoke-CimMethod -CimSession $CimSession -ClassName Win32_Process -MethodName Create -Arguments @{
CommandLine = "powershell.exe -Command `$scriptBlock"
} | Out-Null
}
Write-ColorOutput "Browser caches cleared successfully." "Green" "Good" $TargetComputer
} catch {
Write-ColorOutput "Failed to clear browser caches: $_" "Red" "Critical" $TargetComputer
}
}
function Run-AllRemediations {
param ([string]$TargetComputer = $env:COMPUTERNAME)
@@ -519,6 +651,7 @@ function Run-AllRemediations {
try {
Clear-WindowsUpdateCache -TargetComputer $TargetComputer -CimSession $cimSession
Clear-WindowsUpdateFiles -TargetComputer $TargetComputer -CimSession $cimSession
Clear-TempFiles -TargetComputer $TargetComputer -CimSession $cimSession -MaxAgeDays 3
Clear-WerDumps -TargetComputer $TargetComputer -CimSession $cimSession
Reset-NetworkStack -TargetComputer $TargetComputer -CimSession $cimSession
@@ -526,6 +659,7 @@ function Run-AllRemediations {
Clear-RecycleBinFiles -TargetComputer $TargetComputer -CimSession $cimSession
Invoke-DismCleanup -TargetComputer $TargetComputer -CimSession $cimSession
Invoke-CleanMgrCleanup -TargetComputer $TargetComputer -CimSession $cimSession
Clear-BrowserCaches -TargetComputer $TargetComputer -CimSession $cimSession
Write-ColorOutput "`nRemediation Cycle Completed!" "Cyan" "Good" $TargetComputer
} finally {
@@ -564,7 +698,8 @@ while (-not $exitRequested) {
"6" { Clear-RecycleBinFiles }
"7" { Invoke-DismCleanup }
"8" { Invoke-CleanMgrCleanup }
"9" { Run-AllRemediations }
"9" { Clear-BrowserCaches }
"10" { Run-AllRemediations }
"Q" { Write-ColorOutput "Exiting script..." "Cyan"; $exitRequested = $true }
default { Write-ColorOutput "Invalid selection." "Red" "Critical" }
}