Advertisement
eliminat

Windows Cleanup with Powershell

Feb 13th, 2023
636
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Calling Powershell as Admin and setting Execution Policy to Bypass to avoid Cannot run Scripts error
  2. param ([switch]$Elevated)
  3. function CheckAdmin {
  4.     $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  5.     $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
  6. }
  7. if ((CheckAdmin) -eq $false) {
  8.     if ($elevated) {
  9.         # could not elevate, quit
  10.     }
  11.     else {
  12.         # Detecting Powershell (powershell.exe) or Powershell Core (pwsh), will return true if Powershell Core (pwsh)
  13.         if ($IsCoreCLR) { $PowerShellCmdLine = "pwsh.exe" } else { $PowerShellCmdLine = "powershell.exe" }
  14.         $CommandLine = "-noprofile -ExecutionPolicy Bypass -File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments + ' -Elevated'
  15.         Start-Process "$PSHOME\$PowerShellCmdLine" -Verb RunAs -ArgumentList $CommandLine
  16.     }
  17.     Exit
  18. }
  19.  
  20. # Rename Title Window
  21. $host.ui.RawUI.WindowTitle = "Clean Browser Temp Files"
  22.  
  23. Function Cleanup {
  24.     # Set Date for Log
  25.     $LogDate = Get-Date -Format "MM-d-yy-HHmm"
  26.  
  27.     # Ask for confirmation to delete users Downloaded files - Anything older than 90 days
  28.     $DeleteOldDownloads = Read-Host "Would you like to delete files older than 90 days in the Downloads folder for All Users? (Y/N)"
  29.    
  30.     # Set Deletion Date for Downloads Folder
  31.     $DelDownloadsDate = (Get-Date).AddDays(-90)
  32.  
  33.     # Set Deletion Date for Inetpub Log Folder
  34.     $DelInetLogDate = (Get-Date).AddDays(-30)
  35.  
  36.     # Set Deletion Date for System32 Log Folder
  37.     $System32LogDate = (Get-Date).AddMonths(-2)
  38.  
  39.     # Set Deletion Date for Azure Logs Folder
  40.     $DelAZLogDate = (Get-Date).AddDays(-7)
  41.  
  42.     # Set Deletion Date for Office File Cache Folder
  43.     $DelOfficeCacheDate = (Get-Date).AddDays(-7)
  44.  
  45.     # Set Deletion Date for LFSAgent Logs Folder
  46.     $DelLFSAGentLogDate = (Get-Date).AddDays(-30)
  47.  
  48.     # Set Deletion Date for SotiMobicontroller Logs
  49.     $DelSotiLogDate = (Get-Date).AddYears(-1)
  50.  
  51.     # Ask for Confirmation to Empty Recycle Bin for All Users
  52.     $CleanBin = Read-Host "Would you like to empty the Recycle Bin for All Users? (Y/N)"
  53.  
  54.     # Get the size of the Windows Updates folder (SoftwareDistribution)
  55.     $WUfoldersize = (Get-ChildItem "$env:windir\SoftwareDistribution" -Recurse | Measure-Object Length -s).sum / 1Gb
  56.  
  57.     # Ask the user if they would like to clean the Windows Update folder
  58.     if ($WUfoldersize -gt 1.5) {
  59.         Write-Host "The Windows Update folder is" ("{0:N2} GB" -f $WUFoldersize)
  60.         $CleanWU = Read-Host "Do you want clean the Software Distribution folder and reset Windows Updates? (Y/N)"
  61.     }
  62.  
  63.     # Get Disk Size
  64.     $Before = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object SystemName,
  65.     @{ Name = "Drive" ; Expression = { ( $_.DeviceID ) } },
  66.     @{ Name = "Size (GB)" ; Expression = { "{0:N1}" -f ( $_.Size / 1gb) } },
  67.     @{ Name = "FreeSpace (GB)" ; Expression = { "{0:N1}" -f ( $_.Freespace / 1gb ) } },
  68.     @{ Name = "PercentFree" ; Expression = { "{0:P1}" -f ( $_.FreeSpace / $_.Size ) } } |
  69.     Format-Table -AutoSize | Out-String
  70.  
  71.     # Define log file location
  72.     $Cleanuplog = "$env:USERPROFILE\Cleanup$LogDate.log"
  73.  
  74.     # Start Logging
  75.     Start-Transcript -Path "$CleanupLog"
  76.  
  77.     # Create list of users
  78.     Write-Host -ForegroundColor Green "Getting the list of Users`n"
  79.     $Users = Get-ChildItem "C:\Users" | Select-Object Name
  80.     $users = $Users.Name
  81.  
  82.     # Begin!
  83.     Write-Host -ForegroundColor Green "Beginning Script...`n"
  84.  
  85.     # Clear Firefox Cache
  86.     Write-Host -ForegroundColor Green "Clearing Firefox Cache`n"
  87.     Foreach ($user in $Users) {
  88.         if (Test-Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles") {
  89.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  90.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  91.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\thumbnails\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  92.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\cookies.sqlite" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  93.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\webappsstore.sqlite" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  94.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\chromeappsstore.sqlite" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  95.             Remove-Item -Path "C:\Users\$user\AppData\Local\Mozilla\Firefox\Profiles\*\OfflineCache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  96.         }
  97.         Write-Host -ForegroundColor Yellow "Done...`n"
  98.     }
  99.     # Clear Google Chrome
  100.     Write-Host -ForegroundColor Green "Clearing Google Chrome Cache`n"
  101.     Foreach ($user in $Users) {
  102.         if (Test-Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data") {
  103.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  104.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  105.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Cookies" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  106.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  107.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Cookies-Journal" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  108.             Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\JumpListIconsOld" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  109.             # Comment out the following line to remove the Chrome Write Font Cache too.
  110.             # Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default\ChromeDWriteFontCache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  111.  
  112.             # Check Chrome Profiles. It looks as though when creating profiles, it just numbers them Profile 1, Profile 2 etc.
  113.             $Profiles = Get-ChildItem -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data" | Select-Object Name | Where-Object Name -Like "Profile*"
  114.             foreach ($Account in $Profiles) {
  115.                 $Account = $Account.Name
  116.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  117.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\Cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  118.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\Cookies" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  119.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  120.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\Cookies-Journal" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  121.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Google\Chrome\User Data\$Account\JumpListIconsOld" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  122.             }
  123.         }
  124.         Write-Host -ForegroundColor Yellow "Done...`n"
  125.     }
  126.  
  127.     # Clear Brave
  128.     Write-Host -ForegroundColor Green "Clearing Brave Cache`n"
  129.     Foreach ($user in $Users) {
  130.         if (Test-Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data") {
  131.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  132.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  133.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Cookies" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  134.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  135.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Cookies-Journal" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  136.             Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\JumpListIconsOld" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  137.             # Comment out the following line to remove the Brave Write Font Cache too.
  138.             # Remove-Item -Path "C:\Users\$user\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\ChromeDWriteFontCache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  139.         }
  140.         Write-Host -ForegroundColor Yellow "Done...`n"
  141.     }
  142.  
  143.     # Clear Vivaldi
  144.     Write-Host -ForegroundColor Green "Clearing Brave Cache`n"
  145.     Foreach ($user in $Users) {
  146.         if (Test-Path "C:\Users\$user\AppData\Local\Vivaldi\User Data") {
  147.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  148.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\Cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  149.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\Cookies" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  150.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  151.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\Cookies-Journal" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  152.             Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\JumpListIconsOld" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  153.             # Comment out the following line to remove the Vivaldi Write Font Cache too.
  154.             # Remove-Item -Path "C:\Users\$user\AppData\Local\Vivaldi\User Data\Default\ChromeDWriteFontCache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  155.         }
  156.         Write-Host -ForegroundColor Yellow "Done...`n"
  157.     }
  158.  
  159.     # Clear Internet Explorer & Edge
  160.     Write-Host -ForegroundColor Yellow "Clearing Internet Explorer & Edge Cache`n"
  161.     Foreach ($user in $Users) {
  162.         Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Windows\Temporary Internet Files\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  163.         Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Windows\INetCache\* " -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  164.         Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Windows\WebCache\* " -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  165.         if (Test-Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data") {
  166.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  167.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\Cache2\entries\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  168.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\Cookies" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  169.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  170.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\Cookies-Journal" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  171.                 Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Edge\User Data\Default\JumpListIconsOld" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  172.         }
  173.     Write-Host -ForegroundColor Yellow "Done...`n"
  174.     }
  175.  
  176.     # Clear Chromium
  177.     Write-Host -ForegroundColor Yellow "Clearing Chromium Cache`n"
  178.     Foreach ($user in $Users) {
  179.         if (Test-Path "C:\Users\$user\AppData\Local\Chromium") {
  180.             Remove-Item -Path "C:\Users\$user\AppData\Local\Chromium\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  181.             Remove-Item -Path "C:\Users\$user\AppData\Local\Chromium\User Data\Default\GPUCache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  182.             Remove-Item -Path "C:\Users\$user\AppData\Local\Chromium\User Data\Default\Media Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  183.             Remove-Item -Path "C:\Users\$user\AppData\Local\Chromium\User Data\Default\Pepper Data" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  184.             Remove-Item -Path "C:\Users\$user\AppData\Local\Chromium\User Data\Default\Application Cache" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  185.         }
  186.         Write-Host -ForegroundColor Yellow "Done...`n"
  187.     }
  188.    
  189.     # Clear Opera
  190.     Write-Host -ForegroundColor Yellow "Clearing Opera Cache`n"
  191.     Foreach ($user in $Users) {
  192.         if (Test-Path "C:\Users\$user\AppData\Local\Opera Software") {
  193.             Remove-Item -Path "C:\Users\$user\AppData\Local\Opera Software\Opera Stable\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  194.         }
  195.         Write-Host -ForegroundColor Yellow "Done...`n"
  196.     }
  197.  
  198.     # Clear Yandex
  199.     Write-Host -ForegroundColor Yellow "Clearing Yandex Cache`n"
  200.     Foreach ($user in $Users) {
  201.         if (Test-Path "C:\Users\$user\AppData\Local\Yandex") {
  202.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  203.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\User Data\Default\GPUCache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  204.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\User Data\Default\Media Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  205.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\User Data\Default\Pepper Data\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  206.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\User Data\Default\Application Cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  207.             Remove-Item -Path "C:\Users\$user\AppData\Local\Yandex\YandexBrowser\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  208.         }
  209.         Write-Host -ForegroundColor Yellow "Done...`n"
  210.     }
  211.  
  212.     # Clear User Temp Folders
  213.     Write-Host -ForegroundColor Yellow "Clearing User Temp Folders`n"
  214.     Foreach ($user in $Users) {
  215.         Remove-Item -Path "C:\Users\$user\AppData\Local\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  216.         Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Windows\WER\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  217.         Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Windows\AppCache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  218.         Remove-Item -Path "C:\Users\$user\AppData\Local\CrashDumps\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  219.     }
  220.     Write-Host -ForegroundColor Yellow "Done...`n"
  221.     # Clear Windows Temp Folder
  222.     Write-Host -ForegroundColor Yellow "Clearing Windows Temp Folder`n"
  223.     Foreach ($user in $Users) {
  224.         Remove-Item -Path "C:\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  225.         Remove-Item -Path "$env:windir\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  226.         Remove-Item -Path "$env:windir\Logs\CBS\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  227.         Remove-Item -Path "$env:ProgramData\Microsoft\Windows\WER\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  228.         # Only grab log files sitting in the root of the Logfiles directory
  229.         $Sys32Files = Get-ChildItem -Path "$env:windir\System32\LogFiles" | Where-Object { ($_.name -like "*.log") -and ($_.lastwritetime -lt $System32LogDate) }
  230.         foreach ($File in $Sys32Files) {
  231.             Remove-Item -Path "$env:windir\System32\LogFiles\$($file.name)" -Force -ErrorAction SilentlyContinue -Verbose
  232.         }
  233.     }
  234.     Write-Host -ForegroundColor Yellow "Done...`n"          
  235.  
  236.     # Clear Inetpub Logs Folder
  237.     if (Test-Path "C:\inetpub\logs\LogFiles\") {
  238.         Write-Host -ForegroundColor Yellow "Clearing Inetpub Logs Folder`n"
  239.         $Folders = Get-ChildItem -Path "C:\inetpub\logs\LogFiles\" | Select-Object Name
  240.         foreach ($Folder in $Folders) {
  241.             $folder = $Folder.Name
  242.             Remove-Item -Path "C:\inetpub\logs\LogFiles\$Folder\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose | Where-Object LastWriteTime -LT $DelInetLogDate
  243.         }
  244.         Write-Host -ForegroundColor Yellow "Done...`n"
  245.     }
  246.  
  247.     # Delete Microsoft Teams Previous Version files
  248.     Write-Host -ForegroundColor Yellow "Clearing Teams Previous version`n"
  249.     Foreach ($user in $Users) {
  250.         if (Test-Path "C:\Users\$user\AppData\Local\Microsoft\Teams\") {
  251.             Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Teams\previous\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  252.             Remove-Item -Path "C:\Users\$user\AppData\Local\Microsoft\Teams\stage\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  253.         }
  254.     }
  255.     Write-Host -ForegroundColor Yellow "Done...`n"
  256.  
  257.     # Delete SnagIt Crash Dump files
  258.     Write-Host -ForegroundColor Yellow "Clearing SnagIt Crash Dumps`n"
  259.     Foreach ($user in $Users) {
  260.         if (Test-Path "C:\Users\$user\AppData\Local\TechSmith\SnagIt") {
  261.             Remove-Item -Path "C:\Users\$user\AppData\Local\TechSmith\SnagIt\CrashDumps\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  262.         }
  263.     }
  264.     Write-Host -ForegroundColor Yellow "Done...`n"
  265.  
  266.     # Clear Dropbox
  267.     Write-Host -ForegroundColor Yellow "Clearing Dropbox Cache`n"
  268.     Foreach ($user in $Users) {
  269.         if (Test-Path "C:\Users\$user\Dropbox\") {
  270.             Remove-Item -Path "C:\Users\$user\Dropbox\.dropbox.cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  271.             Remove-Item -Path "C:\Users\$user\Dropbox*\.dropbox.cache\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  272.         }
  273.     }
  274.     Write-Host -ForegroundColor Yellow "Done...`n"
  275.  
  276.     # Clear HP Support Assistant Installation Folder
  277.     if (Test-Path "C:\swsetup") {
  278.         Remove-Item -Path "C:\swsetup" -Force -ErrorAction SilentlyContinue -Verbose
  279.     }
  280.  
  281.     # Delete files older than 90 days from Downloads folder
  282.     if ($DeleteOldDownloads -eq 'Y') {
  283.         Write-Host -ForegroundColor Yellow "Deleting files older than 90 days from User Downloads folder`n"
  284.         Foreach ($user in $Users) {
  285.             $UserDownloads = "C:\Users\$user\Downloads"
  286.             $OldFiles = Get-ChildItem -Path "$UserDownloads\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object LastWriteTime -LT $DelDownloadsDate
  287.             foreach ($file in $OldFiles) {
  288.                 Remove-Item -Path "$UserDownloads\$file" -Force -ErrorAction SilentlyContinue -Verbose
  289.             }
  290.         }
  291.         Write-Host -ForegroundColor Yellow "Done...`n"
  292.     }
  293.  
  294.     # Delete files older than 7 days from Azure Log folder
  295.     if (Test-Path "C:\WindowsAzure\Logs") {
  296.         Write-Host -ForegroundColor Yellow "Deleting files older than 7 days from Azure Log folder`n"
  297.         $AzureLogs = "C:\WindowsAzure\Logs"
  298.         $OldFiles = Get-ChildItem -Path "$AzureLogs\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object LastWriteTime -LT $DelAZLogDate
  299.         foreach ($file in $OldFiles) {
  300.             Remove-Item -Path "$AzureLogs\$file" -Force -ErrorAction SilentlyContinue -Verbose
  301.         }
  302.         Write-Host -ForegroundColor Yellow "Done...`n"
  303.     }
  304.  
  305.     # Delete files older than 7 days from Office Cache Folder
  306.     Write-Host -ForegroundColor Yellow "Clearing Office Cache Folder`n"
  307.     Foreach ($user in $Users) {
  308.         $officecache = "C:\Users\$user\AppData\Local\Microsoft\Office\16.0\GrooveFileCache"
  309.         if (Test-Path $officecache) {
  310.             $OldFiles = Get-ChildItem -Path "$officecache\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object LastWriteTime -LT $DelOfficeCacheDate
  311.             foreach ($file in $OldFiles) {
  312.                 Remove-Item -Path "$officecache\$file" -Force -ErrorAction SilentlyContinue -Verbose
  313.             }
  314.         }
  315.     }
  316.     Write-Host -ForegroundColor Yellow "Done...`n"
  317.  
  318.     # Delete files older than 30 days from LFSAgent Log folder https://www.lepide.com/
  319.     if (Test-Path "$env:windir\LFSAgent\Logs") {
  320.         Write-Host -ForegroundColor Yellow "Deleting files older than 30 days from LFSAgent Log folder`n"
  321.         $LFSAgentLogs = "$env:windir\LFSAgent\Logs"
  322.         $OldFiles = Get-ChildItem -Path "$LFSAgentLogs\" -Recurse -File -ErrorAction SilentlyContinue | Where-Object LastWriteTime -LT $DelLFSAGentLogDate
  323.         foreach ($file in $OldFiles) {
  324.             Remove-Item -Path "$LFSAgentLogs\$file" -Force -ErrorAction SilentlyContinue -Verbose
  325.         }
  326.         Write-Host -ForegroundColor Yellow "Done...`n"
  327.     }        
  328.  
  329.     # Delete SOTI MobiController Log files older than 1 year
  330.     if (Test-Path "C:\Program Files (x86)\SOTI\MobiControl") {
  331.         Write-Host -ForegroundColor Yellow "Deleting SOTI MobiController Log files older than 1 year`n"
  332.         $SotiLogFiles = Get-ChildItem -Path "C:\Program Files (x86)\SOTI\MobiControl" | Where-Object { ($_.name -like "*Device*.log" -or $_.name -like "*Server*.log" ) -and ($_.lastwritetime -lt $DelSotiLogDate) }
  333.         foreach ($File in $SotiLogFiles) {
  334.             Remove-Item -Path "C:\Program Files (x86)\SOTI\MobiControl\$($file.name)" -Force -ErrorAction SilentlyContinue -Verbose
  335.         }
  336.         Write-Host -ForegroundColor Yellow "Done...`n"
  337.     }
  338.  
  339.     # Delete old Cylance Log files
  340.     if (Test-Path "C:\Program Files\Cylance\Desktop") {
  341.         Write-Host -ForegroundColor Yellow "Deleting Old Cylance Log files`n"
  342.         $OldCylanceLogFiles = Get-ChildItem -Path "C:\Program Files\Cylance\Desktop" | Where-Object name -Like "cylog-*.log"
  343.         foreach ($File in $OldCylanceLogFiles) {
  344.             Remove-Item -Path "C:\Program Files\Cylance\Desktop\$($file.name)" -Force -ErrorAction SilentlyContinue -Verbose
  345.         }
  346.         Write-Host -ForegroundColor Yellow "Done...`n"
  347.     }
  348.  
  349.     # Delete Windows Updates Folder (SoftwareDistribution) and reset the Windows Update Service
  350.     if ($CleanWU -eq 'Y') {
  351.         Write-Host -ForegroundColor Yellow "Restarting Windows Update Service and Deleting SoftwareDistribution Folder`n"
  352.         # Stop the Windows Update service
  353.         try {
  354.             Stop-Service -Name wuauserv
  355.         }
  356.         catch {
  357.             $ErrorMessage = $_.Exception.Message
  358.             Write-Warning "$ErrorMessage"
  359.         }
  360.         # Delete the folder
  361.         Remove-Item "$env:windir\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
  362.         Start-Sleep -s 3
  363.  
  364.         # Start the Windows Update service
  365.         try {
  366.             Start-Service -Name wuauserv
  367.         }
  368.         catch {
  369.             $ErrorMessage = $_.Exception.Message
  370.             Write-Warning "$ErrorMessage"
  371.         }
  372.         Write-Host -ForegroundColor Yellow "Done..."
  373.         Write-Host -ForegroundColor Yellow "Please rerun Windows Update to pull down the latest updates `n"
  374.     }
  375.  
  376.     # Empty Recycle Bin
  377.     if ($Cleanbin -eq 'Y') {
  378.         Write-Host -ForegroundColor Green "Cleaning Recycle Bin`n"
  379.         $ErrorActionPreference = 'SilentlyContinue'
  380.         $RecycleBin = "C:\`$Recycle.Bin"
  381.         $BinFolders = Get-ChildItem $RecycleBin -Directory -Force
  382.  
  383.         Foreach ($Folder in $BinFolders) {
  384.             # Translate the SID to a User Account
  385.             $objSID = New-Object System.Security.Principal.SecurityIdentifier ($folder)
  386.             try {
  387.                 $objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
  388.                 Write-Host -Foreground Yellow -Background Black "Cleaning $objUser Recycle Bin"
  389.             }
  390.             # If SID cannot be Translated, Throw out the SID instead of error
  391.             catch {
  392.                 $objUser = $objSID.Value
  393.                 Write-Host -Foreground Yellow -Background Black "$objUser"
  394.             }
  395.             $Files = @()
  396.  
  397.             if ($PSVersionTable.PSVersion -Like "*2*") {
  398.                 $Files = Get-ChildItem $Folder.FullName -Recurse -Force
  399.             }
  400.             else {
  401.                 $Files = Get-ChildItem $Folder.FullName -File -Recurse -Force
  402.                 $Files += Get-ChildItem $Folder.FullName -Directory -Recurse -Force
  403.             }
  404.  
  405.             $FileTotal = $Files.Count
  406.  
  407.             for ($i = 1; $i -le $Files.Count; $i++) {
  408.                 $FileName = Select-Object -InputObject $Files[($i - 1)]
  409.                 Write-Progress -Activity "Recycle Bin Clean-up" -Status "Attempting to Delete File [$i / $FileTotal]: $FileName" -PercentComplete (($i / $Files.count) * 100) -Id 1
  410.                 Remove-Item -Path $Files[($i - 1)].FullName -Recurse -Force
  411.             }
  412.             Write-Progress -Activity "Recycle Bin Clean-up" -Status "Complete" -Completed -Id 1
  413.         }
  414.         Write-Host -ForegroundColor Green "Done`n `n"
  415.     }
  416.  
  417.     Write-Host -ForegroundColor Green "All Tasks Done!`n`n"
  418.  
  419.  
  420.     # Get Drive size after clean
  421.     $After = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object SystemName,
  422.     @{ Name = "Drive" ; Expression = { ( $_.DeviceID ) } },
  423.     @{ Name = "Size (GB)" ; Expression = { "{0:N1}" -f ( $_.Size / 1gb) } },
  424.     @{ Name = "FreeSpace (GB)" ; Expression = { "{0:N1}" -f ( $_.Freespace / 1gb ) } },
  425.     @{ Name = "PercentFree" ; Expression = { "{0:P1}" -f ( $_.FreeSpace / $_.Size ) } } |
  426.     Format-Table -AutoSize | Out-String
  427.  
  428.     # Sends some before and after info for ticketing purposes
  429.     Write-Host -ForegroundColor Green "Before: $Before"
  430.     Write-Host -ForegroundColor Green "After: $After"
  431.  
  432.     # Another reminder about running Windows update if needed as it would get lost in all the scrolling text.
  433.     if ($CleanWU -eq 'Y') {
  434.         Write-Host -ForegroundColor Yellow "`nPlease rerun Windows Update to pull down the latest updates. `n"
  435.     }
  436.  
  437.     # Read some of the output before going away
  438.     Start-Sleep -s 15
  439.  
  440.     # Completed Successfully!
  441.     # Open Text File
  442.     Invoke-Item $Cleanuplog
  443.  
  444.     # Stop Script
  445.     Stop-Transcript
  446. }
  447.  
  448. # Listing all files in C:\Temp\* recursively, using Force parameter displays hidden files.
  449. $TempItems = Get-ChildItem -Path "C:\Temp\*" -Recurse -Force
  450. if ($TempItems.count -gt 1) {
  451.     Write-Warning "There are files within C:\Temp, please verify that important files are out of this location"
  452.     $Cont = Read-Host "Continue with the cleanup script [Y/N]"
  453.     if ($cont -eq "Y") {
  454.         Cleanup
  455.     }
  456.     else {
  457.         Write-Host "Please check the files within C:\Temp before running the script again"
  458.         Start-Sleep -Seconds 5
  459.     }
  460. }
  461. else {
  462.     Cleanup
  463. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement