Para aqueles que precisam utilizar frequentemente o Robocopy para copiar dados entre ambientes, fica inviável ter que conferir constantemente os logs e corrigir possíveis erros. E como tratar esses logs e arquivá-los?
Resolvi automatizar esse processo numa das empresas que trabalhei, através de um script em PowerShell.
Obs.: Estou tratando o erro mais comum que é o de conexão, mas podemos tratar outros também.
Primeiramente o script procura pelo erro e envia por e-mail para o suporte caso encontre.
O segundo passo é tratar os logs, comprimindo e renomeando com suas respectivas datas.
E por fim, basta configurar no agendador de tarefas do Windows ou qualquer solução que você possua para executar suas tasks.
Start-Transcript -path “D:\Logs\valida_robocopy.log”
Write-Output “Executado em $(Get-Date -format g)”
############### Verifica os logs do ROBOCOPY (Server1) ###############
$erro = “ERROR: RETRY LIMIT EXCEEDED”
$result = Get-ChildItem -path “C:\Users\Administrador\Desktop\Log_Robocopy\*.txt” | Select-String $erro | Select-Object -unique Filename | Format-Table -HideTableHeaders
echo $resultif ($result -eq $null)
{
echo Sem erro na rotina
}
else
{
Send-MailMessage -to “suporte@meu_dominio.com.br” -From “server@meu_dominio.com.br” -Subject “Erro no rotina do ROBOCOPY (Server1) entre a origem e o destino.” -body “$erro. Favor verificar.” -SmtpServer 127.0.0.1echo Erro na rotina do ROBOCOPY: $erro. Um e-mail de alerta foi enviado.
}############### Compressão dos logs para controle de evidência. ###############
if (-not (test-path “$env:ProgramFiles\7-Zip\7z.exe”)) {throw “$env:ProgramFiles\7-Zip\7z.exe needed”}
set-alias sz “$env:ProgramFiles\7-Zip\7z.exe”$timestamp = get-date -f yyyyMMdd
$source = “C:\Users\Administrador\Desktop\Log_Robocopy\*.txt”
$target = “D:\$(Get-Date -UFormat “%Y”)\$(Get-Date -UFormat “%m”)”If (!(Test-Path $target))
{
mkdir “D:\Evidencia Backups\Robocopy\$(Get-Date -UFormat “%Y”)\$(Get-Date -UFormat “%m”)”
}sz a -mx=9 $target\$timestamp.zip $source
Stop-Transcript