Borrado centralizado y masivo de archivos con Microsoft PowerShell

Un script que de manera remota y centralizada pueda borrar ficheros con cierta edad



Lo que se pretende es lanzar desde un punto central un borrado de ciertos archivos a una serie de equipos. Estos nombres de equipos estarán listados en un archivo de texto separados por un retorno de carro.

Previo

1)  Tener instalado MS PowerShell


2)  En PowerShell, habilitar ejecución de scripts
     Para saber el estado del sistema => Get-ExecutionPolicy, seguramente tendrás

Restricted, para cambiar el nivel ejecutar en PowerShell como administrador la siguiente línea:
Set-ExecutionPolicy Unrestricted

3)  Para calcular los tamaños de las carpetas es necesario instalar el módulo de PowerShell , siempre como administrador, siguiente:


Install-Module PSFolderSize

El Script

######################################################
#                                                    #
# Massive Delete Log                                 #
#                                                    #
###################################################### 
 

    # Variables
    # ruta del archivo con la lista de equipos
    $ListPCPath = "C:\tmp\ListPC.txt"
    # introducir lista en variable
    $ListPC = Get-Content -Path $ListPCPath
    # ruta de borrado
    $DeleteUnit ="C$"
    $DeleteFolder = "tmp"
    $DeletePath = "$DeleteUnit\$DeleteFolder\"
    # antiguedad para borrar
    $DeleteAge = (Get-Date).AddDays(-9)
    # ruta del log
    $LogPath = "C:\tmp\log1.txt"
      
    # 
    ForEach($NamePC in $ListPC) {
    # comprobar si el PC está accesible
    $PCOnline = Test-Connection $NamePC -Count 1 -Delay 2 -Quiet
    If ($PCOnline -eq "true") {

        # montar la ruta remota
        $RemotePath = "\\$NamePC\$DeletePath"
            
        # conocer el tamaño 
        $Size = (Get-FolderSize -BasePath "\\$NamePC\$DeleteUnit\" -FolderName $DeleteFolder)
        
        # borrado ficheros anteriores a x dias
        Get-ChildItem -path  $RemotePath | where {$_.Lastwritetime -lt $DeleteAge} | remove-item -Force -Recurse


        # escribir log
            # capturar fecha
            $Date = Get-Date -Format g
            # montar el mensaje
            $LogText =  $Date + "; $NamePC" + "; Tamaño: $Size"
            # escribir en archivo
            Out-File -FilePath $LogPath -Append -InputObject $LogText
        }

    Else{
        # escribir log
            # capturar fecha
            $Date = Get-Date -Format g
            # montar el mensaje
            $LogText =  $Date + "; Equipo no accesible; $NamePC"
            # escribir en archiv
            Out-File -FilePath $LogPath -Append -InputObject $LogText
        }
        
    }
        
  
Consideraciones

  1. Debes tener derechos sobre las maquinas remotas para poder actuar sobre ellas.
  2. No está implementado un control exhaustivo de errores.




No hay comentarios:

Publicar un comentario