Exmos
Este Script serve para comprimir os logs anteriores ao dia de hoje para poupar espaço em disco nos servidores.
Se encontrarem algum problema no script ou tiverem sugestões para optimizar digam..
strComputer = "."
str7z = "D:\7-Zip\7z.exe"
i=0
If WScript.Arguments.Count = 0 then
WScript.Echo "Falta Path para Directório. Utilização: cscript compress.vbs dir1 ""dir 2"" (etc)"
Else
'Por cada pasta passada como argumento
For Each strArgument in WScript.Arguments
strDir = WScript.Arguments.Item(i)
Set oShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Colecção de ficheiros dentro da pasta strDir
Set colFiles = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='"& strDir &"'} Where " _
& "ResultClass = CIM_DataFile")
'Monitor de processos que me informa dos processos que são terminados
Set colMonitoredProcesses = objWMIService. _
ExecNotificationQuery("select * from __instancedeletionevent " _
& "within 1 where TargetInstance isa 'Win32_Process'")
If colFiles.Count >0 Then
'Por cada ficheiro
For Each objFile In colFiles
'Só os Logs é que interessam. Qualquer outro ficheiro passa a frente
If WMIDateStringToDate(objFile.CreationDate) < now() And objFile.Extension = "log" Then
'Rotina de compressão
oShell.Run ""& str7z &" a -tzip """& strDir &"""\"& objFile.FileName &".zip "_
& " """& strDir &"""\"& objFile.FileName &".log"
WScript.Echo "Criei o ficheiro "& strDir &"\"& objFile.FileName &".zip "
'Rotina de eliminação de logs
z = 0
'Loop de espera (sleep até o zip estar terminado)
Do While z = 0
Set objLatestProcess = colMonitoredProcesses.NextEvent
If objLatestProcess.TargetInstance.Name = "7z.exe" Then
'o processo 7z acabou; posso sair do loop de espera e apagar o log original
objFile.Delete
WScript.Echo "Apaguei o ficheiro "& strDir &"\"& objFile.FileName &"."& objFile.Extension &" "
z = 1
'nao deve ser necessário, mas....
Exit Do
End If
Loop
End If
Next
End if
i = i+1
Next
End If
'função para alterar o formato da data retornado pelo wmi_script
Function WMIDateStringToDate(dtmDate)
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & _
Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate, _
13, 2))
End Function
WScript.Quit

