Novedades SQL Server

Novedades Joomla

Informática SpectraFutura

 

 

Informatica SpectraFutura

 

 

¡Atención! Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso.

Acepto

Script de mantenimiento de Logs

Publicado en Microsoft Internet Information Server ( IIS ) Jueves, 21 Enero 2016
Valora este artículo
(0 votos)

En este artículo vamos a presentar un script para mantener logs, evitando que puedan colapsar el almacenamiento y repercutir en el funcionamiento general del sistema.

Existen multitud de aplicaciones que por su naturaleza y uso, registran detalles de su funcionamiento o de acceso a las mismas, que en algunos casos puedan tener un gran peso y ocupar mucho espacio.

Por ejemplo en el caso de IIS, segun el site, su volumen de accesos y carga que soporta, puede llegar a generar logs diarios de Gigas.

Este grupo de scripts se podría usar para el mantenimiento de logs de cualquier aplicación y para tener controlado el espacio que estos ocupan, comprimiendolos y empaquetandolos, en ficheros de dias y meses y moviendolos a un almacenamiento de red, a modo de histórico fuera de las máquinas que los generan.

 

Basicamente su ejecución implica:

1º .-    Compactado y empaquetado de logs de una ruta determinada, primero en días y después en meses, ubicando los archivos empaquetados en un directorio "Historico", dentro de la ruta de logs a tratar.

 MantenimientoLogsIIS 1


2º .-    Movimiento de los ficheros empaquetados en meses a un almacenamiento de red de histórico de logs, conforme a unos parametros de tiempo que podremos parametrizar.

MantenimientoLogsIIS 2

 

Teniendo ya una visión de como funciona el proceso, vamos a enumerar los archivos implicados en esta automatización que ubicaremos, por ejemplo, en una carpeta de "MantenimientoLogs", en c:\TareasProgramadas.

 

Tambien deberemos crear dentro de esta carpeta de "MantenimientoLogs" un directorio "logs", donde se irán registrando el estado de todas las operaciones de compactado, creacción de directorios historicos de los diferentes sites, etc, con el objeto de tener un seguimiento del proceso en caso de tener que diagnosticar algun mal funcionamiento.

 

Es importante mencionar que en este directorio C:\TareasProgramadas\MantenimientoLogs\Logs, propio del proceso en sí, se irán generando logs conforme se vaya ejecutando, pero que como veremos mas adelante se automantendrán quedandose disponibles los que estimemos de acuerdo a un parámetro que veremos mas adelante.

 

En el almacenamiento de red donde iremos almacenando los archivos comprimidos de meses de las diferentes máquinas y sus correspondientes websites, tendremos que generar una estructura de carpetas que podría ser algo así:

 

MantenimientoLogsIIS 3

 

1.    MantenimientoLogs.bat (Raiz del proceso)

 Este fichero batch de procesamiento por lotes es el que debemos programar su ejecución, en el administrador de tareas, y a raiz del cual se desencadenará todo el proceso.

Consta de dos líneas en las que en la 1ª otorgaremos permisos de ejecución a nivel de powershell al usuario de la tarea programada, y en la 2ª ejecutaremos el script powershell MantenimientoLogs.ps1 seguido de unos parametros, que veremos mas adelante, y nos permitirán flexibilizar la ejecución y adecuarla al entorno y circunstancias que nos convenga.

 

  1. %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe set-executionpolicy -scope CurrentUser -executionPolicy unrestricted -force
  2. %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe "C:\TareasProgramadas\MantenimientoLogs\MantenimientoLogs.ps1 PRODUCCION INTRANET IIS7 180"

 


2.    MantenimientoLogs.ps1 (script principal)

Parámetros que se deben pasar:

         - entorno (1er PARAMETRO):         DESARROLLO, PREPRODUCCION, PRODUCCION

         Ejemplo1 :  MantenimientoLogs.ps1 -entorno PREPRODUCCION [...]
         Ejemplo2 :  MantenimientoLogs.ps1 PREPRODUCCION [...]
         

       - red (2º PARAMETRO)     :            INTRANET, DMZ

         Ejemplo1 :  MantenimientoLogs.ps1 -entorno PREPRODUCCION -red INTRANET [...]
         Ejemplo2 :  MantenimientoLogs.ps1 PREPRODUCCION INTRANET [...]


       - versioniis (3er PARAMETRO):    IIS6, IIS7

         Ejemplo1 :  MantenimientoLogs.ps1 -entorno PREPRODUCCION -red INTRANET -versioniis IIS7 [...]
         Ejemplo2 :  MantenimientoLogs.ps1 PREPRODUCCION INTRANET IIS7 [...]


       - retención (4º PARAMETRO):       nº de dias
               Nº de dias que se van a mantener los ficheros comprimidos mensuales en la ruta, antes
                de ser pasados al almacenamiento de red
       
    NOTA: Los modificadores que preceden a los parametros ( -entorno, -red, versionIIS ) se puede omitir
          pero los parametros deben seguir el orden
               entorno red versionIIS retención

    NOTA2: Todos los parametros son obligatorios

 

Este script, se encargará de:

1.- Registrar el estado de sus propios movimiento, acciones y resultados en la carpeta C:\TareasProgramadas\MantenimientoLogs\Logs

2.- Recuperará mediante los cmdlets de powershell para IIS los websites y sus rutas de logs.

3.- Lanzará la compresión sobre los archivos de logs de las rutas recuperadas en el paso anterior, mediante el script comprimir_logs.vbs, al que se le pasará como parámetros la ruta y una retención de dias que no queremos que trate ni comprima. Este parámetro de retención está configurado por defecto en "/ret:-30", pero se podría modificar manualmente segun convenga. NO CONFUNDIR ESTA RETENCIÓN DE comprimir_logs.vbs CON LA RETENCIÓN DE MantenimientoLogs.ps1.

4.- En función del 4º parámetro "retención", indicaremos el nº de días que mantendremos los ficheros comprimidos mensuales en el directorio historico de las rutas de logs de IIS.

 

  1. # ***********************************************************************************************
  2. # ***********************************************************************************************
  3. # Este script realiza el empaquetado de logs de IIS ubicados en las RUTAS de logs de IIS
  4. # empaquentado los ficheros de acuerdo a sus fechas.
  5. # Autor: SpectraFutura.Net
  6. # Fecha creacción: 09/07/2013
  7. # Version: 2
  8. # Ultima modificación: 21/10/2015
  9. # USO:
  10. # Se debe ejecutar el script pasando como parametros :
  11. # - entorno (1er PARAMETRO): DESARROLLO, PREPRODUCCION, PRODUCCION
  12. #
  13. # Ejemplo1 : MantenimientoLogs.ps1 -entorno PREPRODUCCION [...]
  14. # Ejemplo2 : MantenimientoLogs.ps1 PREPRODUCCION [...]
  15. #
  16. #
  17. # - red (2º PARAMETRO) : INTRANET, DMZ
  18. #
  19. # Ejemplo1 : MantenimientoLogs.ps1 -entorno PREPRODUCCION -red INTRANET [...]
  20. # Ejemplo2 : MantenimientoLogs.ps1 PREPRODUCCION INTRANET [...]
  21. #
  22. #
  23. # - versioniis (3er PARAMETRO): IIS6, IIS7
  24. #
  25. # Ejemplo1 : MantenimientoLogs.ps1 -entorno PREPRODUCCION -red INTRANET -versioniis IIS7 [...]
  26. # Ejemplo2 : MantenimientoLogs.ps1 PREPRODUCCION INTRANET IIS7 [...]
  27. #
  28. #
  29. # - retención (4º PARAMETRO): nº de dias
  30. # Nº de dias que se van a mantener los ficheros comprimidos mensuales en la ruta, antes
  31. # de ser pasados al repositorio de historicos
  32. #
  33. # NOTA: Los modificadores que preceden a los parametros ( -entorno, -red, versionIIS ) se puede omitir
  34. # pero los parametros deben seguir el orden
  35. # entorno red versionIIS retención
  36. #
  37. # NOTA2: Todos los parametros son obligatorios
  38. #
  39. # ***********************************************************************************************
  40. # ***********************************************************************************************
  41.  
  42.  
  43. Param(
  44. [Parameter(Mandatory=$True, Position=0)]
  45. [ValidateSet("DESARROLLO","PREPRODUCCION","PRODUCCION")]
  46. [string]$entorno,
  47.  
  48. [Parameter(Mandatory=$True, Position=1)]
  49. [ValidateSet("INTRANET","DMZ")]
  50. [string]$red,
  51.  
  52. [Parameter(Mandatory=$True, Position=2)]
  53. [ValidateSet("IIS6","IIS7")]
  54. [string]$versionIIS,
  55.  
  56. [Parameter(Mandatory=$True, Position=3)]
  57. [int]$retencion
  58. )
  59.  
  60.  
  61. #permitimos la ejecucion de scripts
  62. #set-executionpolicy -scope CurrentUser -executionPolicy unrestricted -force
  63.  
  64. #Variables generales
  65.  
  66. $NameMachine = gc env:computername
  67. $fullPathIncFileName = $MyInvocation.MyCommand.Definition
  68. $currentScriptName = $MyInvocation.MyCommand.Name
  69. $RutaAplicacion = $fullPathIncFileName.Replace($currentScriptName, "")
  70. $dates= get-date -format yyyyMMdd_HH_mm
  71. $fichlog = "MoverLogs_"+$dates+".log"
  72. $rutalog = $RutaAplicacion + "logs\"
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79. #importamos modulos de WebAdministration
  80. Import-Module WebAdministration
  81.  
  82. #cargamos funciones de Logging para recoger las trazas de funcionamiento
  83. .'C:\TareasProgramadas\MantenimientoLogs\Logging_Functions.ps1'
  84.  
  85. Log-Start -logPath 'C:\TareasProgramadas\MantenimientoLogs\logs' -LogName $fichlog -ScriptVersion '1.1'
  86. if($red -eq "DMZ")
  87. {
  88. # Establecemos la ruta destino en DMZ donde guardaremos los empaquetados de meses a modo de historico final
  89. $dirDestino = '\\FICHEROSDMZ.SPECTRAFUTURA.SFU\AplicacionesIIS\'+ $entorno.ToUpper() +"\HISTORICO-"+$red.ToUpper()+"\"+$versionIIS.ToUpper()
  90. }
  91. else
  92. {
  93. # Establecemos la ruta destino en INTRANET donde guardaremos los empaquetados de meses a modo de historico final
  94. $dirDestino = '\\FICHEROS.SPECTRAFUTURA.SFU\AplicacionesIIS\'+ $entorno.ToUpper() +"\HISTORICO-"+$red.ToUpper()+"\"+$versionIIS.ToUpper()
  95. }
  96. $parametros = $NameMachine +" "+ $entorno.ToUpper()+ "-"+$red.ToUpper()+"-"+$versionIIS.ToUpper()
  97.  
  98. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "EJECUTANDO SCRIPT EN EL ENTORNO: $parametros"
  99.  
  100. #comprobamos la existencia del directorio destino SI NO SE CREA
  101. if(Test-Path($dirDestino))
  102. {
  103. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 1er nivel $dirDestino EXISTE."
  104.  
  105. }
  106. else
  107. {
  108. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 1er nivel $dirDestino NO EXISTE -> SE CREA."
  109. # creamos rutaDestino
  110. New-Item -Path $dirDestino -type directory -Force
  111.  
  112. }
  113.  
  114.  
  115. #Comprobamos la existencia del directorio de servidor "Logs_%Machinename%
  116. $dirDestino = $dirDestino + "\Logs_" + $NameMachine
  117. if(Test-Path($dirDestino))
  118. {
  119. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 2º nivel $dirDestino EXISTE."
  120.  
  121. }
  122. else
  123. {
  124. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 2º nivel $dirDestino NO EXISTE -> SE CREA."
  125. # creamos rutaDestino
  126. New-Item -Path $dirDestino -type directory -Force
  127.  
  128. }
  129.  
  130.  
  131. $RutaConfLogs = (Get-WebConfigurationProperty "/system.applicationHost/sites/siteDefaults" -name logfile.directory).Value
  132. $RutaConfLogs = $RutaConfLogs -replace "%SystemDrive%", "C:"
  133. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Ruta de los logs a nivel de configuracion IIS: $RutaConfLogs"
  134.  
  135. Get-Website | foreach {
  136.  
  137.  
  138. $sites = @("$($_.name)", "$($_.id)", "$($RutaConfLogs)\W3SVC$($_.id)")
  139.  
  140. #Comprobamos la existencia del directorio IIS de Logs correspondiente al site
  141. $dirDestino1 = $dirDestino + "\"+ $_.id + "." + $_.name
  142. if(Test-Path($dirDestino1))
  143. {
  144. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 3er nivel $dirDestino1 EXISTE."
  145. }
  146. else
  147. {
  148. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 3er nivel $dirDestino1 NO EXISTE -> SE CREA."
  149. # creamos rutaDestino
  150. New-Item -Path $dirDestino1 -type directory -Force
  151. }
  152.  
  153. $dirOrigenCompresion = $sites[2]
  154. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Comprimiendo Logs ( $dirOrigenCompresion ) ..."
  155.  
  156. # EL PARÁMETRO /ret:-30 indicará cuantos dias mantendrá sin tratar desde la fecha actual
  157. # en este caso (-30) los últimos 30 días los dejará sin tratar.
  158. cscript $RutaAplicacion\comprimir_logs.vbs /ruta:$dirOrigenCompresion /ret:-30
  159. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Compresion finalizada..."
  160.  
  161. $dirOrigenHistorico = $dirOrigenCompresion + "\Historico"
  162.  
  163. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Transfiriendo ficheros mensuales al repositorio comun de red ($dirDestino1)..."
  164. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "desde $dirOrigenHistorico ..."
  165. $fechaLimite = (get-date).addDays(-$retencion).ToString('dd/MM/yyyy')
  166. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "y que su fecha ultima de modificación sea menor que $fechaLimite ..."
  167.  
  168. $Files = GCI -path $dirOrigenHistorico | Where-object {$_.lastwritetime -lt (get-date).addDays(-$retencion)}
  169.  
  170. foreach ($file in $files) {
  171. $Origen = $dirOrigenHistorico + "\"+ $file
  172. $ultimaModif = $file.lastwritetime.ToString('dd/MM/yyyy')
  173. Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Moviendo fichero mensual ( $file ) ultima vez modificado el $ultimaModif ..."
  174. Move-Item -path $Origen -destination $dirDestino1 -Force
  175. }
  176.  
  177.  
  178.  
  179. }
  180.  
  181.  
  182. Log-Finish -LogPath "$rutalog\$fichlog"
  183.  
  184.  
  185.  
  186. set-executionpolicy -scope CurrentUser -executionPolicy restricted -force
  187.  
  188.  
  189.  


3.    Logging_Functions.ps1 (script de apoyo, conseguido por internet, con funciones para registrar el log de funcionamiento del proceso)


4.    comprimir_logs.vbs (script de compresion) -> resultado del proceso en C:\TareasProgramadas\MantenimientoLogs\Logs.

  1. '***********************************************************************************************
  2. '***********************************************************************************************
  3. ' Este script realizará un mepaquetado de los ficheros de un directorio por fechas.
  4. ' Autor: SpectraFutura.Net
  5. ' Fecha creacción: 07/06/2013
  6. ' Version: 2
  7. ' Ultima modificación: 15/06/2013
  8. 'USO: Se debe ejecutar el script pasando como parametro :
  9. ' - El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas (").
  10. ' En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar).
  11. ' ejemplo : comprimir_logs.vbs "/ruta:d:\aplicaciones\pruebas 2"
  12. ' - Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo "/ret:-10" dias antes
  13. ' de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos.
  14. ' - Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso.
  15. ' Ej: "/ex:*.ini,*.pdf
  16. ' Si no se especifica el parametro se procesarán todos los archivos del directorio
  17. '
  18. '***********************************************************************************************
  19. '***********************************************************************************************
  20.  
  21. Dim fso, fslog, folder, LogFile, files, sFolder, ficheros, tsTextFile, FHistorico, wshShell
  22. Dim fecha_tratada, array_fecha, retencion, fecha_historico, temp, fechBorrado, extensiones, noext, excluido
  23.  
  24. Public dia, dia0, mes, ano ' Variables que contendran en todo momento el dia, mes y año actual.
  25.  
  26. CRLF = Chr(13) & Chr(10)
  27. FechaFormat = Fecha()
  28.  
  29. const retencion_logs = -10 ' Periodo de retención en días que se guardarán los logs, los anteriores se borrarán
  30. ' a la hora en la que se envíe la estadistica.
  31.  
  32. LogFile = AppPath & "Logs\" & FechaFormat & ".log"
  33. DirLogs = AppPath & "\logs"
  34.  
  35. ' *************************************************************************************************************
  36. ' PROCEDIMIENTO PRINCIPAL
  37. '*************************************************************************************************************
  38.  
  39.  
  40. ' Crea el directorio de log en caso de ser necesario
  41. Set wshShell = CreateObject ("wscript.shell")
  42. Set fso = CreateObject("Scripting.FileSystemObject")
  43. Set fslog = CreateObject("Scripting.FileSystemObject")
  44. 'Comprobamos si existe la carpeta de log
  45. If (fso.FolderExists(DirLogs)) Then
  46. 'Msgbox DirLogs & " exists."
  47. Else
  48. fso.CreateFolder(DirLogs)
  49. End If
  50.  
  51. 'Crea el fichero de log
  52. Set tsTextFile = fslog.CreateTextFile(LogFile, True)
  53. tsTextFile.writeline NOW & "-> Inicio Log"
  54. tsTextFile.Close
  55. EscribeLog("RESULTADO DE LA EJECUCIÓN DEl SCRIPT DE ")
  56. EscribeLog("EMPAQUETADO DE FICHEROS POR FECHA DE MODIFICACIÓN")
  57. EscribeLog("==================================================")
  58.  
  59. 'Control de los parametros pasado a la aplicación
  60. 'Set objArgs = WScript.Arguments
  61. If WScript.Arguments.Unnamed.Count > 0 then
  62. EscribeLog("No se ha pasado los parametros correctos")
  63. EscribeLog("USO: Se debe ejecutar el script pasando como parametro :")
  64. EscribeLog("- El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas .")
  65. EscribeLog(" En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar).")
  66. EscribeLog(" ejemplo : comprimir_logs.vbs /ruta:d:\aplicaciones\pruebas 2 ")
  67. EscribeLog("- Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo '/ret:-10' dias antes" )
  68. EscribeLog(" de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos.")
  69. EscribeLog("- Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso. ")
  70. EscribeLog(" Ej: /ex:*.ini,*.pdf ")
  71. Set fso = Nothing
  72. Set wshShell = Nothing
  73. Set fslog = Nothing
  74. WScript.Quit
  75. End If
  76.  
  77. ' Captura del argumento pasado a traves de linea de comandos (ruta, ret y ex)
  78.  
  79. If WScript.Arguments.Named.Exists("ruta") Then
  80. sFolder = WScript.Arguments.Named("ruta")
  81. EscribeLog("Directorio a procesar: " & sFolder)
  82. else
  83. EscribeLog("No se ha pasado el parametro de la ruta a procesar:")
  84. EscribeLog("USO: Se debe ejecutar el script pasando como parametro :")
  85. EscribeLog("- El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas .")
  86. EscribeLog(" En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar).")
  87. EscribeLog(" ejemplo : comprimir_logs.vbs /ruta:d:\aplicaciones\pruebas 2 ")
  88. EscribeLog("- Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo '/ret:-10' dias antes" )
  89. EscribeLog(" de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos.")
  90. EscribeLog("- Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso. ")
  91. EscribeLog(" Ej: /ex:*.ini,*.pdf ")
  92. ' Si no se especifica el parametro se procesarán todos los archivos del directorio
  93. Set fso = Nothing
  94. Set wshShell = Nothing
  95. Set fslog = Nothing
  96. WScript.Quit
  97. End If
  98. If WScript.Arguments.Named.Exists("ret") Then
  99. retencion = DateAdd("d", WScript.Arguments.Named("ret"), Date)
  100. else
  101. retencion = Date
  102. End If
  103. EscribeLog("Fecha de retención a partir de la cual, no se empaquetaran los archivos: " & retencion)
  104. If WScript.Arguments.Named.Exists("ex") Then
  105. extensiones = split(WScript.Arguments.Named("ex"), ",")
  106. for i=0 to Ubound(extensiones)
  107. extensiones(i) = Right(extensiones(i), InStr(1,extensiones(i),".") +1)
  108. EscribeLog("Archivos con extensión a excluir: *." & extensiones(i))
  109. next
  110. noext = "SI"
  111. else
  112. noext = "NO"
  113. End If
  114.  
  115.  
  116.  
  117. ' Chequeo de la existencia del directorio a procesar
  118. If NOT (fso.FolderExists(sFolder)) Then
  119. EscribeLog("El directorio " & sFolder & " NO EXISTE - COMPRUEBA LA RUTA")
  120. Set fso = Nothing
  121. Set wshShell = Nothing
  122. Set fslog = Nothing
  123. WScript.Quit
  124. End If
  125.  
  126. ' Se genera el directorio de historio debajo del directorio a tratar
  127. If NOT (fso.FolderExists(sFolder & "\Historico")) Then
  128. Set FHistorico = fso.CreateFolder(sFolder & "\Historico")
  129. EscribeLog("Creacción del directorio de Historico : " & FHistorico)
  130. else
  131. FHistorico = sFolder & "\Historico"
  132. EscribeLog("Directorio de historicos YA EXISTÍA ( " & FHistorico & " )")
  133. End If
  134.  
  135.  
  136. ' Inicio del proceso de chequeo y empaquetado de los archivos
  137. Set folder = fso.GetFolder(sFolder)
  138. Set files = folder.Files
  139. ficheros = 0
  140.  
  141.  
  142.  
  143. For Each File In Folder.Files
  144. excluido = "NO"
  145. if noext = "SI" then
  146. for i=0 to Ubound(extensiones)
  147. if extensiones(i) = fso.GetExtensionName(File.name) then
  148. excluido = "SI"
  149. EscribeLog("Archivo con extensión a excluir: *." & extensiones(i))
  150. end if
  151. next
  152. end if
  153. 'EscribeLog ("Extension del fichero " & File.name & " " & fso.GetExtensionName(File.name))
  154. if excluido = "NO" then
  155. ficheros = ficheros + 1
  156. fecha_tratada = Replace(File.DateLastModified, ":", "-")
  157. fecha_tratada = Replace(fecha_tratada, "/", "-")
  158. array_fecha = split(fecha_tratada, " ")
  159.  
  160. If DateValue(File.DateLastModified) <= DateValue(retencion) then
  161.  
  162. If (fso.FileExists(FHistorico &amp; "\" &amp; array_fecha(0) &amp; ".rar")) Then
  163. EscribeLog (sFolder &amp; "\" &amp; File.name &amp; " -> Fichero comprimido de fecha " &amp; File.DateLastModified &amp; " ENCONTRADO")
  164. Else
  165. EscribeLog (sFolder &amp; "\" &amp; File.name &amp; " -> Fichero comprimido de fecha " &amp; File.DateLastModified &amp; " NO ENCONTRADO; SE CREA")
  166. End If
  167. EscribeLog ("rar a -df -ep -m5 """ &amp; FHistorico &amp; "\" &amp; array_fecha(0) &amp; ".rar"" """ &amp; sFolder &amp; "\" &amp; File.name &amp; """")
  168. wshShell.Run "rar a -df -ep -m5 """ &amp; FHistorico &amp; "\" &amp; array_fecha(0) &amp; ".rar"" """ &amp; sFolder &amp; "\" &amp; File.name &amp; """", 0, True
  169. end if
  170. end if
  171. Next
  172.  
  173. EscribeLog ("N&ordm; de ficheros tratados: " &amp; ficheros)
  174. EscribeLog ("FIN DE COMPRESI&Oacute;N DE FICHEROS POR D&Iacute;AS ")
  175. EscribeLog ("***************************************************")
  176. EscribeLog ("INICIO COMPRESI&Oacute;N DE FICHEROS DE HIST&Oacute;RICO POR MESES")
  177. EscribeLog ("Directorio de Hist&oacute;rico: " &amp; FHistorico)
  178.  
  179.  
  180. ficheros = 0
  181. Set folder = fso.GetFolder(FHistorico)
  182. Set files = folder.Files
  183. For Each File In Folder.Files
  184. ficheros = ficheros + 1
  185. temp = split(File.name, "-")
  186. if len(File.name) = 14 then
  187. EscribeLog ("Mes vigente: " &amp; temp(1) &amp; " " &amp; CalculaMes(temp(1)))
  188. EscribeLog ("rar a -df -ep " &amp; FHistorico &amp; "\Mensual-" &amp; left(temp(2),4) &amp; "-" &amp; temp(1) &amp; "_" &amp; CalculaMes(temp(1)) &amp; ".rar """ &amp; FHistorico &amp; "\" &amp; File.name &amp; """")
  189. wshShell.Run "rar a -df -ep -m5 """ &amp; FHistorico &amp; "\Mensual-" &amp; left(temp(2),4) &amp; "-" &amp; temp(1) &amp; "_" &amp; CalculaMes(temp(1)) &amp; ".rar"" """ &amp; FHistorico &amp; "\" &amp; File.name &amp; """", 0, True
  190. 'Mensual-2010-01_ENERO.rar
  191. end if
  192. Next
  193. EscribeLog ("N&ordm; de ficheros tratados: " &amp; ficheros)
  194. EscribeLog ("FIN DE COMPRESI&Oacute;N DE FICHEROS POR MESES")
  195.  
  196.  
  197. ' Borrado de los logs anteriores
  198. EscribeLog ("Borrado de los ficheros LOG anteriores a " &amp; retencion_logs &amp; " d&iacute;as respecto a hoy " &amp; dia0 &amp; "-" &amp; mes &amp; "-" &amp; ano)
  199. fechBorrado = DateAdd("d", retencion_logs, dia0 &amp; "-" &amp; mes &amp; "-" &amp; ano)
  200. comando = "cscript //nologo " &amp; AppPath &amp; "borrar-ficheros-hasta-fecha.vbs """ &amp; DirLogs &amp; """ """ &amp; fechBorrado &amp; """"
  201. EscribeLog ("Comando: " &amp; comando)
  202. wshShell.Run comando, 0, True 'Se ejecuta y espera a terminar (True), en modo visible (1) ???
  203.  
  204. EscribeLog ("FIN DEL SCRIPT")
  205. Set fso = Nothing
  206. Set wshShell = Nothing
  207. Set fslog = Nothing
  208. WScript.Quit
  209.  
  210.  
  211.  
  212. '**********************************************
  213. Function EscribeLog(Linea)
  214. '**********************************************
  215. ' Env&iacute;a log a fichero y a pantalla
  216. '**********************************************
  217. on error resume next
  218. Set tsTextFile = fslog.OpenTextFile(LogFile, 8, True)
  219. tsTextFile.WriteLine NOW &amp; "-> " &amp; Linea
  220. tsTextFile.Close
  221.  
  222. End Function
  223.  
  224.  
  225.  
  226. '**************************************************
  227. function Fecha()
  228. '**************************************************
  229. ' Compone el nombre en formato TIPO_X_DDMMYYYY_HHMM
  230. '**************************************************
  231. on error resume next
  232. 'Compone la fecha actual
  233. If oArgs.Count = 0 Then
  234. fech = date
  235. else
  236. fech = oArgs.item(0)
  237. end if
  238. ano = datepart("yyyy",fech)
  239. diaN = datepart("d",fech)
  240. dia = datepart("d",fech)
  241. dia0 = datepart("d",fech)
  242. if len(dia0) = 1 then dia0 = "0" &amp; dia0
  243. if len(dia) = 1 then dia = "0" &amp; dia
  244. mes = datepart("m",fech)
  245. if len(mes) = 1 then mes = "0" &amp; mes
  246.  
  247. 'Compone la hora actual
  248. horaact = time
  249. hora = datepart("h",horaact)
  250. if len(hora) = 1 then hora = "0" &amp; hora
  251. minutos = datepart("n",horaact)
  252. if len(minutos) = 1 then minutos = "0" &amp; minutos
  253. numdiasem = weekday(fech) 'Devuelve el n&uacute;mero de d&iacute;a en la semana
  254. diasem = MID("DLMXJVS",numdiasem,1) ' Lo transforma a letra correspondiente
  255.  
  256.  
  257. if diasem = "L" then diasemana = "LUNES"
  258. if diasem = "M" then diasemana = "MARTES"
  259. if diasem = "X" then diasemana = "MIERCOLES"
  260. if diasem = "J" then diasemana = "JUEVES"
  261. if diasem = "V" then diasemana = "VIERNES"
  262. if diasem = "S" then diasemana = "SABADO"
  263. if diasem = "D" then diasemana = "DOMINGO"
  264. CalculaMes( mes )
  265. FechaInforme = "Fecha de informe: " &amp; dia &amp; "/" &amp; mes &amp; "/" &amp; ano
  266. FechaAct = dia &amp; "/" &amp; mes &amp; "/" &amp; ano
  267. DirFecha = dia &amp; "_" &amp; mes &amp; "_" &amp; ano &amp; "_" &amp; diasemana
  268. Fecha = "ZIP_" &amp; dia &amp; "_" &amp; mes &amp; "_" &amp; ano &amp; "_" &amp; diasemana &amp; "_" &amp; Replace(time, ":", "-")
  269. end function
  270.  
  271.  
  272.  
  273. '********************************************************************
  274. '** Funcion para obtener el nombre del mes **
  275. '********************************************************************
  276. function CalculaMes( mesi )
  277.  
  278. if len(mesi) = 1 then mesi = "0" &amp; mesi
  279. if mesi = "01" or mesi = "1" then
  280. CalculaMes = "ENERO"
  281. elseif mesi = "02" or mesi = "2" then
  282. CalculaMes = "FEBRERO"
  283. elseif mesi = "03" or mesi = "3" then
  284. CalculaMes = "MARZO"
  285. elseif mesi = "04" or mesi = "4" then
  286. CalculaMes = "ABRIL"
  287. elseif mesi = "05" or mesi = "5" then
  288. CalculaMes = "MAYO"
  289. elseif mesi = "06" or mesi = "6" then
  290. CalculaMes = "JUNIO"
  291. elseif mesi = "07" or mesi = "7" then
  292. CalculaMes = "JULIO"
  293. elseif mesi = "08" or mesi = "8" then
  294. CalculaMes = "AGOSTO"
  295. elseif mesi = "09" or mesi = "9" then
  296. CalculaMes = "SEPTIEMBRE"
  297. elseif mesi = "10" then
  298. CalculaMes = "OCTUBRE"
  299. elseif mesi = "11" then
  300. CalculaMes = "NOVIEMBRE"
  301. elseif mesi = "12" then
  302. CalculaMes = "DICIEMBRE"
  303. end if
  304.  
  305.  
  306. end function
  307.  
  308. '***************************************************************************************
  309. '****************** Funcion que me devuelve la ruta que contiene al script *********************
  310. '***************************************************************************************
  311. Function AppPath
  312. AppPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
  313. ' B&aacute;sicamente es "quita del nombre absoluto del script el nombre simple"
  314. ' "c:\temp\ejemplo.vbs" - "ejemplo.vbs" = "c:\temp\"
  315. End Function
  316.  
  317. '***************************************************************************************
  318. '****************** Funcion que trata los argumentos *+++++++++++++********************
  319. '***************************************************************************************
  320. Function parametros
  321. 'Array con los nombres de argumentos contemplados
  322. Dim arr_Argumentos
  323.  
  324. arr_Argumentos = Array("A","B","C","D")
  325.  
  326. 'Contador de elementos del array
  327. Dim int_Elemento
  328.  
  329. 'Almacenar&aacute; d&oacute;nde est&aacute;n los dos puntos en los par&aacute;metros
  330. Dim int_Puntos
  331.  
  332. 'Almacenar&aacute; la etiqueta del argumento con nombre
  333. Dim str_Etiqueta
  334.  
  335. 'Contador de argumentos
  336. Dim int_Argumento
  337.  
  338. 'Se pondr&aacute; a True si el argumento se encontr&oacute;
  339. Dim bol_Encontrado
  340.  
  341. 'Almacenar&aacute; el mensaje en caso de encontrar un argumento no
  342. 'contemplado
  343.  
  344. 'Recorremos todos los argumentos en un bucle For
  345. For int_Argumento = 0 To WScript.Arguments.Count - 1
  346.  
  347. 'Revisamos si el argumento recibido es con nombre o sin &eacute;l.
  348. 'Para ello miramos si comienza por barra de dividir
  349. If Left(WScript.Arguments(int_Argumento),1) = "/" Then
  350.  
  351. 'Obtenemos la posici&oacute;n de los dos puntos que separan la
  352. 'etiqueta del valor, en el caso de los par&aacute;metros
  353. int_Puntos = InStr(1,WScript.Arguments(int_Argumento),":")
  354.  
  355. 'Se ha encontrado el caracter de dos puntos, es un par&aacute;metro
  356. If int_Puntos > 0 Then
  357. 'La etiqueta es, por tanto desde el segundo caracter
  358. '(la barra de divisi&oacute;n la quitamos) hasta el anterior a
  359. 'los dos puntos
  360. str_Etiqueta = Mid(WScript.Arguments(int_Argumento),2,int_Puntos - 2)
  361.  
  362. 'No se ha encontrado el caracter de dos puntos, es un modificador
  363. Else
  364.  
  365. 'La etiqueta es todo el argumento menos la barra de
  366. 'divisi&oacute;n inicial
  367. str_Etiqueta = Right(WScript.Arguments(int_Argumento),Len(WScript.Arguments(int_Argumento)) - 1)
  368.  
  369. End If
  370.  
  371. 'Marcamos como no encontrado el argumento
  372. bol_Encontrado = False
  373.  
  374. 'Veremos ahora si est&aacute; la etiqueta dentro del Array
  375. For int_Elemento = LBound(arr_Argumentos) To UBound(arr_Argumentos)
  376.  
  377. If Ucase(arr_Argumentos(int_Elemento)) = Ucase(str_Etiqueta) Then
  378. bol_Encontrado = True
  379. Exit For
  380.  
  381. End If
  382.  
  383. 'Si no se ha encontrado el argumento, lo almacenmos
  384. 'en el mensaje
  385. Next 'int_Elemento
  386.  
  387. If Not bol_Encontrado Then
  388.  
  389. str_Mensaje = str_Mensaje &amp; "El argumento " &amp; _
  390. str_Etiqueta &amp; " no est&aacute; cont" &amp; _
  391. "emplado en este script." &amp; _
  392. vbCrLf
  393.  
  394. End If
  395.  
  396. End If
  397.  
  398. Next 'int_Argumento
  399.  
  400. 'Si el mensaje tiene contenido...
  401. If Len(str_Mensaje) > 0 Then
  402.  
  403. 'mostramos el mensaje y terminamos el script con error 1
  404. EscribeLog ( "Error 1: Par&aacute;metro/s no contemplado/s por este script. El/los par&aacute;metro/s no contemplado/s es/son: " &amp; str_Mensaje)
  405. Set fso = Nothing
  406. Set wshShell = Nothing
  407. Set fslog = Nothing
  408. WScript.Quit
  409.  
  410. Else
  411.  
  412. 'Todos los argumentos pasados son contemplados por el script,
  413. 'lo indicamos y salimos del script sin error
  414. EscribeLog ("Argumentos correctos")
  415. End If
  416.  
  417. End Function

 


5.    borrar-ficheros-hasta-fecha.vbs : mantenimiento automático de logs de la carpeta C:\TareasProgramadas\MantenimientoLogs\Logs (dejará los logs de los últimos 30 días)


6.    rar.exe (utilidad de compresión


7.    Rarreg.key (complemento necesario de rar.exe)

 

Podeis descargar un paquete comprimido con todos los archivos en MantenimientoLogs.zip. (ESTÁ LIBRE DE VIRUS)

Visto 3216 veces Modificado por última vez en Viernes, 22 Enero 2016

Artículos Internet Information Server

  • Appcmd en IIS 7.5
      Appcmd.exe , es la herramienta de administración de IIS a nivel de comando. Es una herramienta que aún se usa, pero con tendencia a desaparecer sustituida por la potencia y flexibilidad que nos brinda PowerShell. Nos permite gestionar mediante scripting, la mayor parte de la funcionalidad de IIS.
    en Microsoft Internet Information Server ( IIS ) Leer más...
  • Script de mantenimiento de Logs
    En este artículo vamos a presentar un script para mantener logs, evitando que puedan colapsar el almacenamiento y repercutir en el funcionamiento general del sistema. Existen multitud de aplicaciones que por su naturaleza y uso, registran detalles de su funcionamiento o de acceso a las mismas, que en algunos casos puedan tener un gran peso y ocupar mucho espacio. Por ejemplo en el caso de IIS, segun el site, su volumen de accesos y carga que soporta, puede llegar a…
    en Microsoft Internet Information Server ( IIS )
    Leer más...
  • Cache Global de Esamblados (GAC) en Sistemas Windows
    GAC o lo que es lo mismo Global Assembly Cache, es el lugar en donde los sistemas windows almacenan las librerías que van a ser compartidas por aplicaciones. Cuando el desarrollador prevé que una serie de funciones de programación almacenadas en una librería vas a ser necesitadas por más de una aplicación y con el objeto de no duplicar ese archivo dll en los binarios de las X aplicaciones, se registra esa librería en la Cache de Ensamblados Global y…
    en Microsoft Internet Information Server ( IIS ) Leer más...

Más Puntuados