# PCS Toolkit - Printer Driver Cleanup $timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $logFile = "$env:USERPROFILE\Desktop\PrinterDriverCleanup_$timestamp.txt" function Log($msg) { Write-Host $msg Add-Content $logFile $msg } function LogColor($msg, $color) { Write-Host $msg -ForegroundColor $color Add-Content $logFile $msg } Log "========================================" Log " PCS Toolkit - Printer Driver Cleanup" Log "========================================" Log "Generated: $(Get-Date)" Log "Computer: $env:COMPUTERNAME" Log "" $isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if (-not $isAdmin) { LogColor "ERROR: This script must be run as Administrator" "Red" Read-Host "Press Enter to exit" exit } Log "=== INSTALLED PRINTERS ===" Log "" $printers = Get-Printer -EA SilentlyContinue if ($printers) { foreach ($p in $printers) { Log " $($p.Name) - Driver: $($p.DriverName)" } } else { Log " No printers installed" } Log "" Log "=== INSTALLED PRINTER DRIVERS ===" Log "" $drivers = Get-PrinterDriver -EA SilentlyContinue $inUseDrivers = $printers | Select-Object -ExpandProperty DriverName -Unique $unusedDrivers = @() foreach ($d in $drivers) { $inUse = $inUseDrivers -contains $d.Name $status = if ($inUse) { "[IN USE]" } else { "[UNUSED]" } $color = if ($inUse) { "Green" } else { "Yellow" } LogColor " $status $($d.Name)" $color if (-not $inUse) { $unusedDrivers += $d } } Log "" Log "Total drivers: $($drivers.Count)" Log "Unused drivers: $($unusedDrivers.Count)" Log "" if ($unusedDrivers.Count -eq 0) { LogColor "No unused printer drivers found." "Green" explorer.exe "/select,$logFile" Read-Host "Press Enter to exit" exit } Log "=== CLEANUP OPTIONS ===" Log "" Write-Host "Found $($unusedDrivers.Count) unused printer driver(s)." -ForegroundColor Yellow Write-Host "" Write-Host "Options:" Write-Host " 1. Remove ALL unused drivers" Write-Host " 2. Select drivers to remove" Write-Host " 3. Exit without removing" Write-Host "" $choice = Read-Host "Enter choice (1-3)" switch ($choice) { "1" { Log "" Log "=== REMOVING ALL UNUSED DRIVERS ===" Log "" # Stop spooler first Log "Stopping Print Spooler..." Stop-Service Spooler -Force Start-Sleep -Seconds 2 $removed = 0 $failed = 0 foreach ($d in $unusedDrivers) { try { Remove-PrinterDriver -Name $d.Name -EA Stop LogColor " Removed: $($d.Name)" "Green" $removed++ } catch { LogColor " Failed: $($d.Name) - $_" "Red" $failed++ } } Log "" Log "Starting Print Spooler..." Start-Service Spooler Log "" LogColor "Removed: $removed drivers" "Green" if ($failed -gt 0) { LogColor "Failed: $failed drivers" "Red" } } "2" { Log "" Log "=== SELECT DRIVERS TO REMOVE ===" Log "" $toRemove = @() for ($i = 0; $i -lt $unusedDrivers.Count; $i++) { $d = $unusedDrivers[$i] Write-Host "[$($i+1)] $($d.Name)" $confirm = Read-Host " Remove this driver? (y/n)" if ($confirm -eq 'y' -or $confirm -eq 'Y') { $toRemove += $d } } if ($toRemove.Count -gt 0) { Log "" Log "Stopping Print Spooler..." Stop-Service Spooler -Force Start-Sleep -Seconds 2 foreach ($d in $toRemove) { try { Remove-PrinterDriver -Name $d.Name -EA Stop LogColor " Removed: $($d.Name)" "Green" } catch { LogColor " Failed: $($d.Name) - $_" "Red" } } Log "" Log "Starting Print Spooler..." Start-Service Spooler } else { Log "No drivers selected for removal." } } default { Log "Exiting without changes." } } Log "" Log "========================================" Log "CLEANUP COMPLETE" Log "========================================" explorer.exe "/select,$logFile" Read-Host "Press Enter to exit"