Public/Remove-All.ps1

<#
    .Description
    This Command removes log files, temp files, downloads, some appdata, and empties the recycle bin. Dependent on if it's specified this is running on a workstation or server will determine what is deleted.
 
    .Parameter Hostname
    Specify a remote endpoint and run cleanup against the C$ unc path. Do not use this if the $env:systemdrive of the remote endpoint is not C:
 
    .Parameter Type
    Specify whether the target is a Computer or a Server. Use 'Computer' for workstations — this preserves browser data and user application caches that are appropriate to keep. Use 'Server' to also remove additional junk such as Google Chrome, Zoom, meeting apps, and other user application data in AppData that would not belong on a server.
 
    .EXAMPLE
    Remove-All
 
    Free up space on the local computer
 
    .EXAMPLE
    Remove-All -Hostname JackPC10
 
    Free up space on a remote PC. May be more effective if run locally.
 
    .EXAMPLE
    Remove-All -Type Server
 
    Removes folders you wouldn't want on a server such as google chrome and meeting applications in local user appdata, but that you would not want to delete on a workstation.
 
    .EXAMPLE
    Remove-All -Type Server -hostname 'azure-rds-04.domain.tld'
 
    Removes folders you wouldn't want on a remote server such as google chrome and meeting applications in local user appdata, but that you would not want to delete on a workstation. May be more effective if run locally.
 
    .NOTES
    USE AT YOUR OWN RISK. YOU SHOULD READ AND UNDERSTAND THIS FUNCTION BEFORE USING IT.
 
    .Link
    https://github.com/TheTaylorLee/AdminToolbox
#>


function Remove-All {

    [CmdletBinding(SupportsShouldProcess)]
    [Alias('rall')]
    param (
        [Parameter(Mandatory = $false)]$hostname,
        [Parameter(Mandatory = $true)]
        [ValidateSet('Computer', 'Server')]
        [string]$Type
    )

    begin {
        #Check For Admin Privleges
        Get-Elevation

        #Statement of Free Space before process block
        Write-Host " "
        Write-Host "Free Space Before Cleaning" -ForegroundColor Yellow
        Get-CimInstance win32_logicaldisk -Filter "drivetype=3" -computer $hostname |
            Format-Table -Property DeviceID, Volumename, `
            @{Name = "SizeGB"; Expression = { [math]::Round($_.Size / 1GB) } }, `
            @{Name = "FreeGB"; Expression = { [math]::Round($_.Freespace / 1GB, 2) } }, `
            @{Name = "PercentFree"; Expression = { [math]::Round(($_.Freespace / $_.size) * 100, 2) } }

        #Statement that the function is freeing up space
        Write-Host "Freeing up space. Enjoy your Coffee!" -BackgroundColor Black -ForegroundColor Green

        #Test if citrix ica client is installed and backup log file for re-inserting later
        if (Test-Path "C:\Program Files (x86)\Citrix\ICA Client") {
            Copy-Item "C:\Program Files (x86)\Citrix\ICA Client\wfcwin32.log" "C:\Program Files (x86)\Citrix\ICA Client\wfcwin32.bak"
        }
    }

    process {
        switch ($Type) {
            'Server' {
                #Free up space on the local or remote server
                if ($null -ne $hostname) {
                    $ErrorActionPreference = 'SilentlyContinue'

                    $recycle = "\\$hostname\" + 'C$\$recycle.bin'
                    Get-Service -ComputerName $hostname TrustedInstaller | Stop-Service -Force
                    Get-ChildItem -Path "\\$hostname\C$\windows\logs" -Include '*.log', '*.cab'  -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "\\$hostname\C$\ProgramData\Microsoft\Windows\WER" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path $recycle -Include '*' -Recurse -Force | Remove-Item -Force -Recurse
                    $tempfolders = @("\\$hostname\C$\Windows\Temp\*", "\\$hostname\C$\Windows\Prefetch\*", "\\$hostname\C$\Documents and Settings\*\Local Settings\temp\*", "\\$hostname\C$\Users\*\Appdata\Local\Temp\*")
                    Remove-Item $tempfolders -Force -Recurse
                    $tempinternetfolders = @("\\$hostname\C$\Users\*\Appdata\Local\Microsoft\Windows\INetCache\*", "\\$hostname\C$\Users\*\Appdata\Local\Microsoft\Windows\Cookies\*", "\\$hostname\C$\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*")
                    Remove-Item $tempinternetfolders -Force -Recurse
                    $Junkfolders = @("\\$hostname\C$\users\*\appdata\roaming\zoom\*", "\\$hostname\C$\users\*\AppData\Local\Google\*", "\\$hostname\C$\users\*\Downloads\*", "\\$hostname\C$\users\*\AppData\Roaming\Slack\Cache\*", "\\$hostname\C$\users\*\AppData\Local\GoToMeeting\*", "\\$hostname\C$\users\*\AppData\Roaming\RingCentralMeetings\*", "\\$hostname\C$\users\*\AppData\Local\Microsoft\Terminal Server Client\*")
                    Remove-Item $Junkfolders -Force -Recurse
                    Get-Service -ComputerName $hostname -Name TrustedInstaller | Start-Service

                    $ErrorActionPreference = 'Continue'
                }

                else {
                    $ErrorActionPreference = 'SilentlyContinue'

                    Stop-Service TrustedInstaller -Force
                    Get-ChildItem -Path "C:\windows\" -Include '*.log', '*.cab'  -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "C:\ProgramData\Microsoft\Windows\WER" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path 'c:\$recycle.bin' -Include '*' -Recurse -Force | Remove-Item -Force -Recurse
                    $tempfolders = @("C:\Windows\Temp\*", "C:\Windows\Prefetch\*", "C:\Documents and Settings\*\Local Settings\temp\*", "C:\Users\*\Appdata\Local\Temp\*")
                    Remove-Item $tempfolders -Force -Recurse
                    $tempinternetfolders = @("C:\Users\*\Appdata\Local\Microsoft\Windows\INetCache\*", "C:\Users\*\Appdata\Local\Microsoft\Windows\Cookies\*", "C:\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*")
                    Remove-Item $tempinternetfolders -Force -Recurse
                    $Junkfolders = @("c:\users\*\appdata\roaming\zoom\*", "c:\users\*\AppData\Local\Google\*", "c:\users\*\Downloads\*", "c:\users\*\AppData\Roaming\Slack\Cache\*", "c:\users\*\AppData\Local\GoToMeeting\*", "c:\users\*\AppData\Roaming\RingCentralMeetings\*", "c:\users\*\AppData\Local\Microsoft\Terminal Server Client\*")
                    Remove-Item $Junkfolders -Force -Recurse
                    powercfg.exe /hibernate off
                    Remove-Item c:\hiberfile.sys -Force -ErrorAction 'silentlycontinue'
                    Start-Service TrustedInstaller

                    $ErrorActionPreference = 'Continue'
                }
            }

            'Computer' {
                #Free up space on the local or remote computer
                if ($null -ne $hostname) {
                    $ErrorActionPreference = 'SilentlyContinue'

                    $recycle = "\\$hostname\" + 'C$\$recycle.bin'
                    Get-ChildItem -Path $recycle -Include '*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-Service -ComputerName $hostname TrustedInstaller | Stop-Service -Force
                    Get-ChildItem -Path "\\$hostname\C$\windows\logs" -Include '*.log', '*.cab'  -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "\\$hostname\C$\ProgramData\Microsoft\Windows\WER" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "\\$hostname\C$\Users\*\AppData\Local\Google\Chrome\User Data\Default\Cache\" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    $tempfolders = @("\\$hostname\C$\Windows\Temp\*", "\\$hostname\C$\Windows\Prefetch\*", "\\$hostname\C$\Documents and Settings\*\Local Settings\temp\*", "\\$hostname\C$\Users\*\Appdata\Local\Temp\*")
                    Remove-Item $tempfolders -Force -Recurse
                    $tempinternetfolders = @("\\$hostname\C$\Users\*\Appdata\Local\Microsoft\Windows\INetCache\*", "\\$hostname\C$\Users\*\Appdata\Local\Microsoft\Windows\Cookies\*", "\\$hostname\C$\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*")
                    Remove-Item $tempinternetfolders -Force -Recurse
                    $Junkfolders = @("\\$hostname\C$\users\*\Downloads\*", "\\$hostname\C$\users\*\AppData\Roaming\Slack\Cache\*", "\\$hostname\C$\users\*\AppData\Local\GoToMeeting\*", "\\$hostname\C$\users\*\AppData\Roaming\RingCentralMeetings\*")
                    Remove-Item $Junkfolders -Force -Recurse
                    Get-Service -ComputerName $hostname -Name TrustedInstaller | Start-Service

                    $ErrorActionPreference = 'Continue'
                }

                else {
                    $ErrorActionPreference = 'SilentlyContinue'

                    Stop-Service TrustedInstaller -Force
                    Get-ChildItem -Path "C:\windows\" -Include '*.log', '*.cab'  -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "C:\ProgramData\Microsoft\Windows\WER" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path 'c:\$recycle.bin' -Include '*' -Recurse -Force | Remove-Item -Force -Recurse
                    Get-ChildItem -Path "C:\Users\*\AppData\Local\Google\Chrome\User Data\Default\Cache\" -Include '*.*' -Recurse -Force | Remove-Item -Force -Recurse
                    $tempfolders = @("C:\Windows\Temp\*", "C:\Windows\Prefetch\*", "C:\Documents and Settings\*\Local Settings\temp\*", "C:\Users\*\Appdata\Local\Temp\*")
                    Remove-Item $tempfolders -Force -Recurse
                    $tempinternetfolders = @("C:\Users\*\Appdata\Local\Microsoft\Windows\INetCache\*", "C:\Users\*\Appdata\Local\Microsoft\Windows\Cookies\*", "C:\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*")
                    Remove-Item $tempinternetfolders -Force -Recurse
                    $Junkfolders = @("c:\users\*\Downloads\*", "c:\users\*\AppData\Roaming\Slack\Cache\*", "c:\users\*\AppData\Local\GoToMeeting\*", "c:\users\*\AppData\Roaming\RingCentralMeetings\*")
                    Remove-Item $Junkfolders -Force -Recurse
                    powercfg.exe /hibernate off
                    Remove-Item c:\hiberfile.sys -Force -ErrorAction 'silentlycontinue'
                    Start-Service TrustedInstaller

                    $ErrorActionPreference = 'Continue'
                }
            }
        }
    }

    end {
        #Test if citrix ica client is installed and add log file back that if missing breaks citrix ica.
        if (Test-Path "C:\Program Files (x86)\Citrix\ICA Client") {
            Rename-Item "C:\Program Files (x86)\Citrix\ICA Client\wfcwin32.log.bak" "C:\Program Files (x86)\Citrix\ICA Client\wfcwin32.log"
        }

        #Display free Space after process block
        Write-Host " "
        Write-Host "Free Space After Cleaning" -ForegroundColor Yellow
        Get-CimInstance win32_logicaldisk -Filter "drivetype=3" -computer $hostname |
            Format-Table -Property DeviceID, Volumename, `
            @{Name = "SizeGB"; Expression = { [math]::Round($_.Size / 1GB) } }, `
            @{Name = "FreeGB"; Expression = { [math]::Round($_.Freespace / 1GB, 2) } }, `
            @{Name = "PercentFree"; Expression = { [math]::Round(($_.Freespace / $_.size) * 100, 2) } }
    }
}