
Limpiar archivos obsoletos, tarea programada windows server
Publicado por JR (1 intervención) el 08/01/2024 19:50:24
Buenas tardes,
No soy un experto pero creo que he logrado crear un script en poweshell para limpiar el file server de mi empresa en sobre carpetas y archivos obsoletos.
Se ha jubilado el informático de mi empresa y me han asignado el puesto. El problema que el fileserver (mas de 800mil archivos y carpetas) es un autentico caos en organización y en peso. Quiero liberar espacio y a raiz de ahi dar permisos a las carpetas para llevar un orden y mantenimiento.
El script trata de eliminar todo archivo o carpeta que cumplan las condiciones dadas. Soy nuevo en este foro y ya que lo he logrado desarrollar este humilde codigo me gustaria que expertos como vosotros me dierais vuestro punto de vista. De paso si a alguien le viene bien, pues mira.. mejor aun. Antes de ejecutarlo realizaré una copia de seguridad
No soy un experto pero creo que he logrado crear un script en poweshell para limpiar el file server de mi empresa en sobre carpetas y archivos obsoletos.
Se ha jubilado el informático de mi empresa y me han asignado el puesto. El problema que el fileserver (mas de 800mil archivos y carpetas) es un autentico caos en organización y en peso. Quiero liberar espacio y a raiz de ahi dar permisos a las carpetas para llevar un orden y mantenimiento.
El script trata de eliminar todo archivo o carpeta que cumplan las condiciones dadas. Soy nuevo en este foro y ya que lo he logrado desarrollar este humilde codigo me gustaria que expertos como vosotros me dierais vuestro punto de vista. De paso si a alguien le viene bien, pues mira.. mejor aun. Antes de ejecutarlo realizaré una copia de seguridad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Crear archivo .bat para programarlo en el programador de tareas de windows con los privilegios mas altos (activar casilla) ya que pueden existir carpetas que tengan permisos solo a ciertos usuarios. Lo recomendable es que este script se ejecute una vez al año
# En base a un directorio raiz, examina todos los archivos si cumplen con la condicion sobre la ultima fecha de modificacion y si no esta excluido este mismo archivo en un log.txt.
# Si dicha fecha del archivo es inferior a la programada y cumplen las condiciones el archivo sera eliminado y lo registrara en un log con extension excel .csv
# el archivo sera eliminado siempre y cuando la carpeta que lo contiene, la carpeta raiz o mismo el archivo en si no este excluido.
# Si existe una carpeta vacia y ésta no esta excluida tambien sera eliminada y se registrara en el log .csv
# la idea es la de limpiar todo el Fileserver de la empresa con archivos y carpetas obsoletas.
# Ruta al directorio que quieres examinar
$rutaDirectorio = "C:\Ruta\Al\Directorio"
# Ruta para el archivo de log CSV
$rutaLog = "C:\Ruta\Al\logEliminacion.csv"
# Ruta al archivo de texto que contiene las exclusiones (carpetas raíz)
$rutaExclusiones = "C:\Ruta\Al\exclusiones.txt"
# Ejemplo de cómo agregar directorios/archivos a la lista de excepciones
# Puedes añadir tantos directorios/archivos como desees a esta lista, uno por línea
# "C:\Ruta\Excepcion1" Carpeta
# "C:\Ruta\Excepcion2\Archivo.txt" Archivo
# Verificación de Exclusiones
if (Test-Path $rutaExclusiones) {
# Leer las exclusiones desde el archivo de texto
$exclusiones = Get-Content $rutaExclusiones
} else {
# Si el archivo de exclusiones no existe, inicializar la variable como un array vacío
$exclusiones = @()
}
# Definir la cantidad de años como variable
$cantidadAnos = 5
# Definir el límite en base a la cantidad de años
$limite = (Get-Date).AddYears(-$cantidadAnos)
# Verificación del Archivo de Log
if (Test-Path $rutaLog) {
# El archivo de log ya existe, obtener la información actual
$elementos = Get-ChildItem -Path $rutaDirectorio -Recurse | Select-Object FullName, LastWriteTime | Where-Object {
$_.FullName -notin $exclusiones -and -not $_.PSIsContainer -and $_.LastWriteTime -lt $limite -and (Get-Item $_.DirectoryName).FullName -notin $exclusiones
}
# Registro de Archivos y Carpetas a Eliminar
foreach ($item in $elementos) {
# Verificar si es un archivo o una carpeta vacía
if ($item.PSIsContainer) {
# Es una carpeta
if ((Get-ChildItem -Path $item.FullName -File).Count -eq 0) {
# Carpeta vacía
$observacion = "Carpeta eliminada por estar vacía"
Remove-Item -Path $item.FullName -Force -Recurse
} else {
# Carpeta con contenido
continue
}
} else {
# Es un archivo
$rutaCarpeta = (Get-Item $item.FullName).DirectoryName
if ($item.LastWriteTime -lt $limite -and $rutaCarpeta -notin $exclusiones) {
$observacion = "Archivo eliminado por no haberse modificado en $cantidadAnos años"
Remove-Item -Path $item.FullName -Force
} else {
# No se elimina el archivo porque la carpeta está excluida
continue
}
}
# Registrar la información en el archivo de log CSV con observación
$registro = [PSCustomObject]@{
"Ruta" = $item.FullName
"FechaUltimaModificacion" = $item.LastWriteTime.ToString("dd/MM/yyyy HH:mm")
"FechaEliminacion" = (Get-Date).ToString("dd/MM/yyyy HH:mm")
"Observacion" = $observacion
}
# Agregar el registro al archivo de log CSV
$registro | Export-Csv -Path $rutaLog -Append -NoTypeInformation -Encoding UTF8
}
} else {
# El archivo de log no existe, crear uno nuevo
$elementos = Get-ChildItem -Path $rutaDirectorio -Recurse | Select-Object FullName, LastWriteTime | Where-Object {
$_.FullName -notin $exclusiones -and -not $_.PSIsContainer -and $_.LastWriteTime -lt $limite -and (Get-Item $_.DirectoryName).FullName -notin $exclusiones
}
# Registro de Archivos y Carpetas a Eliminar
foreach ($item in $elementos) {
# Verificar si es un archivo o una carpeta vacía
if ($item.PSIsContainer) {
# Es una carpeta
if ((Get-ChildItem -Path $item.FullName -File).Count -eq 0) {
# Carpeta vacía
$observacion = "Carpeta eliminada por estar vacía"
Remove-Item -Path $item.FullName -Force -Recurse
} else {
# Carpeta con contenido
continue
}
} else {
# Es un archivo
$rutaCarpeta = (Get-Item $item.FullName).DirectoryName
if ($item.LastWriteTime -lt $limite -and $rutaCarpeta -notin $exclusiones) {
$observacion = "Archivo eliminado por no haberse modificado en $cantidadAnos años"
Remove-Item -Path $item.FullName -Force
} else {
# No se elimina el archivo porque la carpeta está excluida
continue
}
}
# Registrar la información en el archivo de log CSV con observación
$registro = [PSCustomObject]@{
"Ruta" = $item.FullName
"FechaUltimaModificacion" = $item.LastWriteTime.ToString("dd/MM/yyyy HH:mm")
"FechaEliminacion" = (Get-Date).ToString("dd/MM/yyyy HH:mm")
"Observacion" = $observacion
}
# Agregar el registro al archivo de log CSV
$registro | Export-Csv -Path $rutaLog -Append -NoTypeInformation -Encoding UTF8
}
}
Valora esta pregunta


0