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
- Debes tener derechos sobre las maquinas remotas para poder actuar sobre ellas.
- No está implementado un control exhaustivo de errores.
No hay comentarios:
Publicar un comentario