Archivo del blog

17 diciembre 2020

Cómo borrar las cookies y ficheros temporales del equipo

Hace ya tiempo, en el departamento, tuvimos que lidiar con unos equipos bastante problemáticos, son equipos de salas de reunión, que por una cosa u otra acaban con el espacio en disco lleno y con problemas de lentitud y la imposibilidad de poder hacer login en el Windows.


Tras mirar y revisar el tema, nos pusimos manos a la obra, y decidimos hacer una política para borrar los perfiles del equipo, y aprovechamos en ejecutarlo todos los viernes por la tarde, que es cuando no hay nadie ya en la oficina, pero si queremos rizar el rizo y usarlo en equipos en los que los perfiles no se pueden borrar, pues miramos de hacer un script para que se ejecute todos los sábados, ya que no hay nadie trabajando y así podemos hacer las tareas de mantenimiento sobre el equipo.

Esto solo sirve cómo tarea preventiva, pero si en el fondo quieres hacer más limpieza y quieres borrar un perfil de Windows de un equipo, podrías crear una política para borrarlos, puedes ver aquí un ejemplo.


-------------------------- El script es este: ----------------------------------------


#- Clear-WindowsUserCacheFiles                                     #
#------------------------------------------------------------------#
Function Clear-WindowsUserCacheFiles {
    param([string]$user=$env:USERNAME)
    Remove-CacheFiles "C:\Users\$user\AppData\Local\Temp"
    Remove-CacheFiles "C:\Users\$user\AppData\Local\Microsoft\Windows\WER"
    Remove-CacheFiles "C:\Users\$user\AppData\Local\Microsoft\Windows\Temporary Internet Files"    
}

#------------------------------------------------------------------#
#- Clear-GlobalWindowsCache                                        #
#------------------------------------------------------------------#
Function Clear-GlobalWindowsCache {
    Remove-CacheFiles 'C:\Windows\Temp' 
    Remove-CacheFiles "C:\`$Recycle.Bin"
    Remove-CacheFiles "C:\Windows\Prefetch"
    C:\Windows\System32\rundll32.exe InetCpl.cpl, ClearMyTracksByProcess 255
    C:\Windows\System32\rundll32.exe InetCpl.cpl, ClearMyTracksByProcess 4351
}

#------------------------------------------------------------------#
#- Clear-ChromeCache                                               #
#------------------------------------------------------------------#
Function Clear-ChromeCache {
    param([string]$user=$env:USERNAME)
    if((Test-Path "C:\users\$user\AppData\Local\Google\Chrome\User Data\Default"))
    {
        $chromeAppData = "C:\Users\$user\AppData\Local\Google\Chrome\User Data\Default" 
        $possibleCachePaths = @('Cache','Cache2\entries\','Cookies','History','Top Sites','VisitedLinks','Web Data','Media Cache','Cookies-Journal','ChromeDWriteFontCache')
        ForEach($cachePath in $possibleCachePaths)
        {
            Remove-CacheFiles "$chromeAppData\$cachePath"
        }      
    } 
}

#------------------------------------------------------------------#
#- Clear-UserCacheFiles                                            #
#------------------------------------------------------------------#
Function Clear-UserCacheFiles {
    Kill-BrowserSessions
    ForEach($localUser in (Get-ChildItem 'C:\users').Name)
    {
        Clear-ChromeCache $localUser
        Clear-FirefoxCacheFiles $localUser
        Clear-WindowsUserCacheFiles $localUser
    }
}

#------------------------------------------------------------------#
#- Clear-FirefoxCacheFiles                                         #
#------------------------------------------------------------------#
Function Clear-FirefoxCacheFiles {
    param([string]$user=$env:USERNAME)
    if((Test-Path "C:\users\$user\AppData\Local\Mozilla\Firefox\Profiles"))
    {
        $possibleCachePaths = @('cache','cache2\entries','thumbnails','cookies.sqlite','webappsstore.sqlite','chromeappstore.sqlite')
        $firefoxAppDataPath = (Get-ChildItem "C:\users\$user\AppData\Local\Mozilla\Firefox\Profiles" | Where-Object { $_.Name -match 'Default' }[0]).FullName 
        ForEach($cachePath in $possibleCachePaths)
        {
            Remove-CacheFiles "$firefoxAppDataPath\$cachePath"
        }
    } 
}

#------------------------------------------------------------------#
#- Clear-WaterfoxCacheFiles                                        #
#------------------------------------------------------------------#
Function Clear-WaterfoxCacheFiles { 
    param([string]$user=$env:USERNAME)
    if((Test-Path "C:\users\$user\AppData\Local\Waterfox\Profiles"))
    {
        $possibleCachePaths = @('cache','cache2\entries','thumbnails','cookies.sqlite','webappsstore.sqlite','chromeappstore.sqlite')
        $waterfoxAppDataPath = (Get-ChildItem "C:\users\$user\AppData\Local\Waterfox\Profiles" | Where-Object { $_.Name -match 'Default' }[0]).FullName
        ForEach($cachePath in $possibleCachePaths)
        {
            Remove-CacheFiles "$waterfoxAppDataPath\$cachePath"
        }
    }   
}

#------------------------------------------------------------------#
#- Kill-BrowserSessions                                            #
#------------------------------------------------------------------#
Function Kill-BrowserSessions {
    $activeBrowsers = Get-Process Firefox*,Chrome*,Waterfox*
    ForEach($browserProcess in $activeBrowsers)
    {
        try 
        {
            $browserProcess.CloseMainWindow() | Out-Null 
        } catch { }
    }
}

#------------------------------------------------------------------#
#- Remove-CacheFiles                                               #
#------------------------------------------------------------------#
Function Remove-CacheFiles {
    param([Parameter(Mandatory=$true)][string]$path)    
    BEGIN 
    {
        $originalVerbosePreference = $VerbosePreference
        $VerbosePreference = 'Continue'  
    }
    PROCESS 
    {
        if((Test-Path $path))
        {
            if([System.IO.Directory]::Exists($path))
            {
                try 
                {
                    if($path[-1] -eq '\')
                    {
                        [int]$pathSubString = $path.ToCharArray().Count - 1
                        $sanitizedPath = $path.SubString(0, $pathSubString)
                        Remove-Item -Path "$sanitizedPath\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose
                    }
                    else 
                    {
                        Remove-Item -Path "$path\*" -Recurse -Force -ErrorAction SilentlyContinue -Verbose              
                    } 
                } catch { }
            }
            else 
            {
                try 
                {
                    Remove-Item -Path $path -Force -ErrorAction SilentlyContinue -Verbose
                } catch { }
            }
        }    
    }
    END 
    {
        $VerbosePreference = $originalVerbosePreference
    }
}

#------------------------------------------------------------------#
#- MAIN                                                            #
#------------------------------------------------------------------#

Clear-UserCacheFiles
Clear-GlobalWindowsCache

Resumiendo, con este este script que está pensado para hacer una limpieza profunda de archivos temporales y de caché, tanto del sistema operativo como de los navegadores (Chrome, Firefox, Waterfox), conseguiremos mejorar tanto el rendimiento del equipo, como liberar espacio en disco.
Espero que os sea de utilidad

Saludos

------------------------------------------------------------------------------------------

Para más información del script: Fuente 

No hay comentarios:

Publicar un comentario

🚀 Automatiza la instalación de Windows como un PRO con Unattend Generator

Si alguna vez has tenido que instalar Windows repetidamente, sabrás lo tedioso que puede ser pasar una y otra vez por las mismas pantallas d...