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.
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.
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í:
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.
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe set-executionpolicy -scope CurrentUser -executionPolicy unrestricted -force %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.
# *********************************************************************************************** # *********************************************************************************************** # Este script realiza el empaquetado de logs de IIS ubicados en las RUTAS de logs de IIS # empaquentado los ficheros de acuerdo a sus fechas. # Autor: SpectraFutura.Net # Fecha creacción: 09/07/2013 # Version: 2 # Ultima modificación: 21/10/2015 # USO: # Se debe ejecutar el script pasando como parametros : # - 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 repositorio de historicos # # 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 # # *********************************************************************************************** # *********************************************************************************************** Param( [Parameter(Mandatory=$True, Position=0)] [ValidateSet("DESARROLLO","PREPRODUCCION","PRODUCCION")] [string]$entorno, [Parameter(Mandatory=$True, Position=1)] [ValidateSet("INTRANET","DMZ")] [string]$red, [Parameter(Mandatory=$True, Position=2)] [ValidateSet("IIS6","IIS7")] [string]$versionIIS, [Parameter(Mandatory=$True, Position=3)] [int]$retencion ) #permitimos la ejecucion de scripts #set-executionpolicy -scope CurrentUser -executionPolicy unrestricted -force #Variables generales $NameMachine = gc env:computername $fullPathIncFileName = $MyInvocation.MyCommand.Definition $currentScriptName = $MyInvocation.MyCommand.Name $RutaAplicacion = $fullPathIncFileName.Replace($currentScriptName, "") $dates= get-date -format yyyyMMdd_HH_mm $fichlog = "MoverLogs_"+$dates+".log" $rutalog = $RutaAplicacion + "logs\" #importamos modulos de WebAdministration Import-Module WebAdministration #cargamos funciones de Logging para recoger las trazas de funcionamiento .'C:\TareasProgramadas\MantenimientoLogs\Logging_Functions.ps1' Log-Start -logPath 'C:\TareasProgramadas\MantenimientoLogs\logs' -LogName $fichlog -ScriptVersion '1.1' if($red -eq "DMZ") { # Establecemos la ruta destino en DMZ donde guardaremos los empaquetados de meses a modo de historico final $dirDestino = '\\FICHEROSDMZ.SPECTRAFUTURA.SFU\AplicacionesIIS\'+ $entorno.ToUpper() +"\HISTORICO-"+$red.ToUpper()+"\"+$versionIIS.ToUpper() } else { # Establecemos la ruta destino en INTRANET donde guardaremos los empaquetados de meses a modo de historico final $dirDestino = '\\FICHEROS.SPECTRAFUTURA.SFU\AplicacionesIIS\'+ $entorno.ToUpper() +"\HISTORICO-"+$red.ToUpper()+"\"+$versionIIS.ToUpper() } $parametros = $NameMachine +" "+ $entorno.ToUpper()+ "-"+$red.ToUpper()+"-"+$versionIIS.ToUpper() Log-Write -LogPath "$rutalog\$fichlog" -LineValue "EJECUTANDO SCRIPT EN EL ENTORNO: $parametros" #comprobamos la existencia del directorio destino SI NO SE CREA if(Test-Path($dirDestino)) { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 1er nivel $dirDestino EXISTE." } else { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 1er nivel $dirDestino NO EXISTE -> SE CREA." # creamos rutaDestino New-Item -Path $dirDestino -type directory -Force } #Comprobamos la existencia del directorio de servidor "Logs_%Machinename% $dirDestino = $dirDestino + "\Logs_" + $NameMachine if(Test-Path($dirDestino)) { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 2º nivel $dirDestino EXISTE." } else { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 2º nivel $dirDestino NO EXISTE -> SE CREA." # creamos rutaDestino New-Item -Path $dirDestino -type directory -Force } $RutaConfLogs = (Get-WebConfigurationProperty "/system.applicationHost/sites/siteDefaults" -name logfile.directory).Value $RutaConfLogs = $RutaConfLogs -replace "%SystemDrive%", "C:" Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Ruta de los logs a nivel de configuracion IIS: $RutaConfLogs" Get-Website | foreach { $sites = @("$($_.name)", "$($_.id)", "$($RutaConfLogs)\W3SVC$($_.id)") #Comprobamos la existencia del directorio IIS de Logs correspondiente al site if(Test-Path($dirDestino1)) { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 3er nivel $dirDestino1 EXISTE." } else { Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Directorio destino 3er nivel $dirDestino1 NO EXISTE -> SE CREA." # creamos rutaDestino New-Item -Path $dirDestino1 -type directory -Force } $dirOrigenCompresion = $sites[2] Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Comprimiendo Logs ( $dirOrigenCompresion ) ..." # EL PARÁMETRO /ret:-30 indicará cuantos dias mantendrá sin tratar desde la fecha actual # en este caso (-30) los últimos 30 días los dejará sin tratar. cscript $RutaAplicacion\comprimir_logs.vbs /ruta:$dirOrigenCompresion /ret:-30 Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Compresion finalizada..." $dirOrigenHistorico = $dirOrigenCompresion + "\Historico" Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Transfiriendo ficheros mensuales al repositorio comun de red ($dirDestino1)..." Log-Write -LogPath "$rutalog\$fichlog" -LineValue "desde $dirOrigenHistorico ..." $fechaLimite = (get-date).addDays(-$retencion).ToString('dd/MM/yyyy') Log-Write -LogPath "$rutalog\$fichlog" -LineValue "y que su fecha ultima de modificación sea menor que $fechaLimite ..." $Files = GCI -path $dirOrigenHistorico | Where-object {$_.lastwritetime -lt (get-date).addDays(-$retencion)} foreach ($file in $files) { $Origen = $dirOrigenHistorico + "\"+ $file $ultimaModif = $file.lastwritetime.ToString('dd/MM/yyyy') Log-Write -LogPath "$rutalog\$fichlog" -LineValue "Moviendo fichero mensual ( $file ) ultima vez modificado el $ultimaModif ..." Move-Item -path $Origen -destination $dirDestino1 -Force } } Log-Finish -LogPath "$rutalog\$fichlog" set-executionpolicy -scope CurrentUser -executionPolicy restricted -force
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.
'*********************************************************************************************** '*********************************************************************************************** ' Este script realizará un mepaquetado de los ficheros de un directorio por fechas. ' Autor: SpectraFutura.Net ' Fecha creacción: 07/06/2013 ' Version: 2 ' Ultima modificación: 15/06/2013 'USO: Se debe ejecutar el script pasando como parametro : ' - El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas ("). ' En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar). ' ejemplo : comprimir_logs.vbs "/ruta:d:\aplicaciones\pruebas 2" ' - Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo "/ret:-10" dias antes ' de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos. ' - Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso. ' Ej: "/ex:*.ini,*.pdf ' Si no se especifica el parametro se procesarán todos los archivos del directorio ' '*********************************************************************************************** '*********************************************************************************************** Dim fso, fslog, folder, LogFile, files, sFolder, ficheros, tsTextFile, FHistorico, wshShell Dim fecha_tratada, array_fecha, retencion, fecha_historico, temp, fechBorrado, extensiones, noext, excluido Public dia, dia0, mes, ano ' Variables que contendran en todo momento el dia, mes y año actual. CRLF = Chr(13) & Chr(10) FechaFormat = Fecha() const retencion_logs = -10 ' Periodo de retención en días que se guardarán los logs, los anteriores se borrarán ' a la hora en la que se envíe la estadistica. LogFile = AppPath & "Logs\" & FechaFormat & ".log" DirLogs = AppPath & "\logs" ' ************************************************************************************************************* ' PROCEDIMIENTO PRINCIPAL '************************************************************************************************************* ' Crea el directorio de log en caso de ser necesario Set wshShell = CreateObject ("wscript.shell") Set fso = CreateObject("Scripting.FileSystemObject") Set fslog = CreateObject("Scripting.FileSystemObject") 'Comprobamos si existe la carpeta de log If (fso.FolderExists(DirLogs)) Then 'Msgbox DirLogs & " exists." Else fso.CreateFolder(DirLogs) End If 'Crea el fichero de log Set tsTextFile = fslog.CreateTextFile(LogFile, True) tsTextFile.writeline NOW & "-> Inicio Log" tsTextFile.Close EscribeLog("RESULTADO DE LA EJECUCIÓN DEl SCRIPT DE ") EscribeLog("EMPAQUETADO DE FICHEROS POR FECHA DE MODIFICACIÓN") EscribeLog("==================================================") 'Control de los parametros pasado a la aplicación 'Set objArgs = WScript.Arguments If WScript.Arguments.Unnamed.Count > 0 then EscribeLog("No se ha pasado los parametros correctos") EscribeLog("USO: Se debe ejecutar el script pasando como parametro :") EscribeLog("- El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas .") EscribeLog(" En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar).") EscribeLog(" ejemplo : comprimir_logs.vbs /ruta:d:\aplicaciones\pruebas 2 ") EscribeLog("- Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo '/ret:-10' dias antes" ) EscribeLog(" de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos.") EscribeLog("- Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso. ") EscribeLog(" Ej: /ex:*.ini,*.pdf ") Set fso = Nothing Set wshShell = Nothing Set fslog = Nothing WScript.Quit End If ' Captura del argumento pasado a traves de linea de comandos (ruta, ret y ex) If WScript.Arguments.Named.Exists("ruta") Then sFolder = WScript.Arguments.Named("ruta") EscribeLog("Directorio a procesar: " & sFolder) else EscribeLog("No se ha pasado el parametro de la ruta a procesar:") EscribeLog("USO: Se debe ejecutar el script pasando como parametro :") EscribeLog("- El directorio a tratar. SI el directorio tiene espacios en blanco se debe incluir dentro de coomillas .") EscribeLog(" En el directorio del script debe de estar la utilidad de compresión rar.exe y Rarreg.key (licencia del rar).") EscribeLog(" ejemplo : comprimir_logs.vbs /ruta:d:\aplicaciones\pruebas 2 ") EscribeLog("- Periodo de Retención, es decir, los días que no queremos que se traten. Por ejemplo '/ret:-10' dias antes" ) EscribeLog(" de la fecha actual. Si no se especifica el parametro, se procesan todos los archivos.") EscribeLog("- Extensiones de los ficheros, seperados por comas, que queremos que se excluyan del proceso. ") EscribeLog(" Ej: /ex:*.ini,*.pdf ") ' Si no se especifica el parametro se procesarán todos los archivos del directorio Set fso = Nothing Set wshShell = Nothing Set fslog = Nothing WScript.Quit End If If WScript.Arguments.Named.Exists("ret") Then retencion = DateAdd("d", WScript.Arguments.Named("ret"), Date) else retencion = Date End If EscribeLog("Fecha de retención a partir de la cual, no se empaquetaran los archivos: " & retencion) If WScript.Arguments.Named.Exists("ex") Then extensiones = split(WScript.Arguments.Named("ex"), ",") for i=0 to Ubound(extensiones) extensiones(i) = Right(extensiones(i), InStr(1,extensiones(i),".") +1) EscribeLog("Archivos con extensión a excluir: *." & extensiones(i)) next noext = "SI" else noext = "NO" End If ' Chequeo de la existencia del directorio a procesar If NOT (fso.FolderExists(sFolder)) Then EscribeLog("El directorio " & sFolder & " NO EXISTE - COMPRUEBA LA RUTA") Set fso = Nothing Set wshShell = Nothing Set fslog = Nothing WScript.Quit End If ' Se genera el directorio de historio debajo del directorio a tratar If NOT (fso.FolderExists(sFolder & "\Historico")) Then Set FHistorico = fso.CreateFolder(sFolder & "\Historico") EscribeLog("Creacción del directorio de Historico : " & FHistorico) else FHistorico = sFolder & "\Historico" EscribeLog("Directorio de historicos YA EXISTÍA ( " & FHistorico & " )") End If ' Inicio del proceso de chequeo y empaquetado de los archivos Set folder = fso.GetFolder(sFolder) Set files = folder.Files ficheros = 0 For Each File In Folder.Files excluido = "NO" if noext = "SI" then for i=0 to Ubound(extensiones) if extensiones(i) = fso.GetExtensionName(File.name) then excluido = "SI" EscribeLog("Archivo con extensión a excluir: *." & extensiones(i)) end if next end if 'EscribeLog ("Extension del fichero " & File.name & " " & fso.GetExtensionName(File.name)) if excluido = "NO" then ficheros = ficheros + 1 fecha_tratada = Replace(File.DateLastModified, ":", "-") fecha_tratada = Replace(fecha_tratada, "/", "-") array_fecha = split(fecha_tratada, " ") If DateValue(File.DateLastModified) <= DateValue(retencion) then If (fso.FileExists(FHistorico & "\" & array_fecha(0) & ".rar")) Then EscribeLog (sFolder & "\" & File.name & " -> Fichero comprimido de fecha " & File.DateLastModified & " ENCONTRADO") Else EscribeLog (sFolder & "\" & File.name & " -> Fichero comprimido de fecha " & File.DateLastModified & " NO ENCONTRADO; SE CREA") End If EscribeLog ("rar a -df -ep -m5 """ & FHistorico & "\" & array_fecha(0) & ".rar"" """ & sFolder & "\" & File.name & """") wshShell.Run "rar a -df -ep -m5 """ & FHistorico & "\" & array_fecha(0) & ".rar"" """ & sFolder & "\" & File.name & """", 0, True end if end if Next EscribeLog ("Nº de ficheros tratados: " & ficheros) EscribeLog ("FIN DE COMPRESIÓN DE FICHEROS POR DÍAS ") EscribeLog ("***************************************************") EscribeLog ("INICIO COMPRESIÓN DE FICHEROS DE HISTÓRICO POR MESES") EscribeLog ("Directorio de Histórico: " & FHistorico) ficheros = 0 Set folder = fso.GetFolder(FHistorico) Set files = folder.Files For Each File In Folder.Files ficheros = ficheros + 1 temp = split(File.name, "-") if len(File.name) = 14 then EscribeLog ("Mes vigente: " & temp(1) & " " & CalculaMes(temp(1))) EscribeLog ("rar a -df -ep " & FHistorico & "\Mensual-" & left(temp(2),4) & "-" & temp(1) & "_" & CalculaMes(temp(1)) & ".rar """ & FHistorico & "\" & File.name & """") wshShell.Run "rar a -df -ep -m5 """ & FHistorico & "\Mensual-" & left(temp(2),4) & "-" & temp(1) & "_" & CalculaMes(temp(1)) & ".rar"" """ & FHistorico & "\" & File.name & """", 0, True 'Mensual-2010-01_ENERO.rar end if Next EscribeLog ("Nº de ficheros tratados: " & ficheros) EscribeLog ("FIN DE COMPRESIÓN DE FICHEROS POR MESES") ' Borrado de los logs anteriores EscribeLog ("Borrado de los ficheros LOG anteriores a " & retencion_logs & " días respecto a hoy " & dia0 & "-" & mes & "-" & ano) fechBorrado = DateAdd("d", retencion_logs, dia0 & "-" & mes & "-" & ano) comando = "cscript //nologo " & AppPath & "borrar-ficheros-hasta-fecha.vbs """ & DirLogs & """ """ & fechBorrado & """" EscribeLog ("Comando: " & comando) wshShell.Run comando, 0, True 'Se ejecuta y espera a terminar (True), en modo visible (1) ??? EscribeLog ("FIN DEL SCRIPT") Set fso = Nothing Set wshShell = Nothing Set fslog = Nothing WScript.Quit '********************************************** Function EscribeLog(Linea) '********************************************** ' Envía log a fichero y a pantalla '********************************************** on error resume next Set tsTextFile = fslog.OpenTextFile(LogFile, 8, True) tsTextFile.WriteLine NOW & "-> " & Linea tsTextFile.Close End Function '************************************************** function Fecha() '************************************************** ' Compone el nombre en formato TIPO_X_DDMMYYYY_HHMM '************************************************** on error resume next 'Compone la fecha actual If oArgs.Count = 0 Then fech = date else fech = oArgs.item(0) end if ano = datepart("yyyy",fech) diaN = datepart("d",fech) dia = datepart("d",fech) dia0 = datepart("d",fech) if len(dia0) = 1 then dia0 = "0" & dia0 if len(dia) = 1 then dia = "0" & dia mes = datepart("m",fech) if len(mes) = 1 then mes = "0" & mes 'Compone la hora actual horaact = time hora = datepart("h",horaact) if len(hora) = 1 then hora = "0" & hora minutos = datepart("n",horaact) if len(minutos) = 1 then minutos = "0" & minutos numdiasem = weekday(fech) 'Devuelve el número de día en la semana diasem = MID("DLMXJVS",numdiasem,1) ' Lo transforma a letra correspondiente if diasem = "L" then diasemana = "LUNES" if diasem = "M" then diasemana = "MARTES" if diasem = "X" then diasemana = "MIERCOLES" if diasem = "J" then diasemana = "JUEVES" if diasem = "V" then diasemana = "VIERNES" if diasem = "S" then diasemana = "SABADO" if diasem = "D" then diasemana = "DOMINGO" CalculaMes( mes ) FechaInforme = "Fecha de informe: " & dia & "/" & mes & "/" & ano FechaAct = dia & "/" & mes & "/" & ano DirFecha = dia & "_" & mes & "_" & ano & "_" & diasemana Fecha = "ZIP_" & dia & "_" & mes & "_" & ano & "_" & diasemana & "_" & Replace(time, ":", "-") end function '******************************************************************** '** Funcion para obtener el nombre del mes ** '******************************************************************** function CalculaMes( mesi ) if len(mesi) = 1 then mesi = "0" & mesi if mesi = "01" or mesi = "1" then CalculaMes = "ENERO" elseif mesi = "02" or mesi = "2" then CalculaMes = "FEBRERO" elseif mesi = "03" or mesi = "3" then CalculaMes = "MARZO" elseif mesi = "04" or mesi = "4" then CalculaMes = "ABRIL" elseif mesi = "05" or mesi = "5" then CalculaMes = "MAYO" elseif mesi = "06" or mesi = "6" then CalculaMes = "JUNIO" elseif mesi = "07" or mesi = "7" then CalculaMes = "JULIO" elseif mesi = "08" or mesi = "8" then CalculaMes = "AGOSTO" elseif mesi = "09" or mesi = "9" then CalculaMes = "SEPTIEMBRE" elseif mesi = "10" then CalculaMes = "OCTUBRE" elseif mesi = "11" then CalculaMes = "NOVIEMBRE" elseif mesi = "12" then CalculaMes = "DICIEMBRE" end if end function '*************************************************************************************** '****************** Funcion que me devuelve la ruta que contiene al script ********************* '*************************************************************************************** Function AppPath AppPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "") ' Básicamente es "quita del nombre absoluto del script el nombre simple" ' "c:\temp\ejemplo.vbs" - "ejemplo.vbs" = "c:\temp\" End Function '*************************************************************************************** '****************** Funcion que trata los argumentos *+++++++++++++******************** '*************************************************************************************** Function parametros 'Array con los nombres de argumentos contemplados Dim arr_Argumentos arr_Argumentos = Array("A","B","C","D") 'Contador de elementos del array Dim int_Elemento 'Almacenará dónde están los dos puntos en los parámetros Dim int_Puntos 'Almacenará la etiqueta del argumento con nombre Dim str_Etiqueta 'Contador de argumentos Dim int_Argumento 'Se pondrá a True si el argumento se encontró Dim bol_Encontrado 'Almacenará el mensaje en caso de encontrar un argumento no 'contemplado 'Recorremos todos los argumentos en un bucle For For int_Argumento = 0 To WScript.Arguments.Count - 1 'Revisamos si el argumento recibido es con nombre o sin él. 'Para ello miramos si comienza por barra de dividir If Left(WScript.Arguments(int_Argumento),1) = "/" Then 'Obtenemos la posición de los dos puntos que separan la 'etiqueta del valor, en el caso de los parámetros int_Puntos = InStr(1,WScript.Arguments(int_Argumento),":") 'Se ha encontrado el caracter de dos puntos, es un parámetro If int_Puntos > 0 Then 'La etiqueta es, por tanto desde el segundo caracter '(la barra de división la quitamos) hasta el anterior a 'los dos puntos str_Etiqueta = Mid(WScript.Arguments(int_Argumento),2,int_Puntos - 2) 'No se ha encontrado el caracter de dos puntos, es un modificador Else 'La etiqueta es todo el argumento menos la barra de 'división inicial str_Etiqueta = Right(WScript.Arguments(int_Argumento),Len(WScript.Arguments(int_Argumento)) - 1) End If 'Marcamos como no encontrado el argumento bol_Encontrado = False 'Veremos ahora si está la etiqueta dentro del Array For int_Elemento = LBound(arr_Argumentos) To UBound(arr_Argumentos) If Ucase(arr_Argumentos(int_Elemento)) = Ucase(str_Etiqueta) Then bol_Encontrado = True Exit For End If 'Si no se ha encontrado el argumento, lo almacenmos 'en el mensaje Next 'int_Elemento If Not bol_Encontrado Then str_Mensaje = str_Mensaje & "El argumento " & _ str_Etiqueta & " no está cont" & _ "emplado en este script." & _ vbCrLf End If End If Next 'int_Argumento 'Si el mensaje tiene contenido... If Len(str_Mensaje) > 0 Then 'mostramos el mensaje y terminamos el script con error 1 EscribeLog ( "Error 1: Parámetro/s no contemplado/s por este script. El/los parámetro/s no contemplado/s es/son: " & str_Mensaje) Set fso = Nothing Set wshShell = Nothing Set fslog = Nothing WScript.Quit Else 'Todos los argumentos pasados son contemplados por el script, 'lo indicamos y salimos del script sin error EscribeLog ("Argumentos correctos") End If 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)