Script em Powershell para enviar email com arquivos do DRM

Para funcionar é necessário criar algumas pastas no servidor:

C:\DRM\
C:\DRM\PLAN
C:\DRM\INSTR
C:\DRM\ZIP
C:\DRM\ENVIADOS

É necessário também instalar o 7ZIP

Para enviar os emails usaremos a ferramenta free SMTPSEND da empresa Dataenter.
Devemos copiar o executável para a pasta C:\DRM\
Obs:. Pode-se usar diretamente no powershell, entretanto, por erros apresentados pela ferramenta no powershell iremos enviar o email executando um .BAT que chama o executável do smtpsend.

SMTPSend.bat:

 C:\DRM\SMTPSend.exe -fserverlocal@domainlocal -temailaccount@gmail.com  -hEMAILSERVER.domainlocal -s%1 -aC:\DRM\ZIP\%2.zip 

Obs:. Lembre-se que seu servidor de email deve aceitar Relay para que o SMTPSend funcione

Se desejar levar os arquivos de Instrução de DRM você deve configurar no TSM para que os arquivos sejam criados na pasta C:\DRM\INSTR e os arquivosde Plano para a pasta C:\DRM\PLAN\ com os comandos:

Set DRMINSTRPrefix
Set DRMPLANPrefix

 

No TSM deve-se criar um script e um schedule admin para exportar os arquivos de DRM.

Dentro do tsm:

def script BACKUP-DRM "SERIAL" line=1 desc="Script que executa a copia dos arquivos de DRM e faz backup da base"
update script BACKUP-DRM "BACKUP DB TY=FULL DEVC=LTOCLASS5_DRM WAIT=YES" line=2
update script BACKUP-DRM "BACKUP DEVCONFIG FILE=C:\DRM\ZIP\devconf.out" line=3
update script BACKUP-DRM "BACKUP VOLHIST FILE=C:\DRM\ZIP\volhist.out" line=4
update script BACKUP-DRM "PREPARE" line=5
define schedule backup_drm t=a cmd="run backup-drm" startt=07:00:00 startd=today

Script de execução do DRM:

DRM.ps1:

#DEFINE SENHA DO ARQUIVO ZIP
$senha="1q2w3e"

#DEFINE O CAMINHO DO EXECUTAVEL DO 7ZIP
$path7zip="C:\DRM\7-Zip\7z.exe"

#DEFINE USUÁRIO E SENHA DE ACESSO AO TSM
$idtsm= "MARCELO"
$passtsm="1Q2W3"

#CAPTURA A DATA ATUAL
$DATA = Get-Date

#ADICIONA A DATA ATUAL NA VARIÁVEL ASSUNTO PARA SER ENVIADA COMO ASSUNTO DO EMAIL
$ASSUNTO = [string]::Concat("PLANO DE DRM ", $DATA.Day,"/",$DATA.Month,"/",$DATA.Year)

#DEFINE ARQUIVO DE LOG
$LOG = [string]::Concat("C:\DRM\LOGS\ENVIO.",$DATA.Day,".",$DATA.Month,".",$DATA.Year,".txt")

Write "INICIANDO SCRIPT" > $LOG
Write "DEFININDO ARQUIVOS DE INSTRUCAO PARA RECUPERACAO" >> $LOG
Write "######################################" >> $LOG

#ARQUIVOS DE INSTRUÇÃO DE RECUPERAÇÃO
$DRMGENERAL = "INSTR.RECOVERY.INSTRUCTIONS.GENERAL"
Write "GENERAL: "$DRMGENERAL " - OK" >> $LOG
$DRMDATABASE = "INSTR.RECOVERY.INSTRUCTIONS.DATABASE"
Write "DATABASE: "$DRMDATABASE " - OK" >> $LOG
$DRMINSTALL = "INSTR.RECOVERY.INSTRUCTIONS.INSTALL"
Write "INSTALL: "$DRMINSTALL " - OK" >> $LOG
$DRMOFFSITE = "INSTR.RECOVERY.INSTRUCTIONS.OFFSITE"
Write "OFFSITE: "$DRMOFFSITE " - OK" >> $LOG
$DRMSTGPOOL = "INSTR.RECOVERY.INSTRUCTIONS.STGPOOL"
Write "STGPOOL: "$DRMSTGPOOL " - OK" >> $LOG

Write "######################################" >> $LOG
Write "ARQUIVOS DE INSTRUCAO PARA RECUPERACAO - OK!" >> $LOG
Write "######################################" >> $LOG

Write "EXECUTANDO FUNCAO DE ZIP" >> $LOG
Write "######################################" >> $LOG

#O 7 ZIP DEVE SER BAIXADO E COPIADO NA PASTA C:\DRM\7-ZIP\

function Write-ZipUsing7Zip([string]$FilesToZip, [string]$ZipOutputFilePath, [string]$Password, [ValidateSet('7z','zip','gzip','bzip2','tar','iso','udf')][string]$CompressionType = 'zip', [switch]$HideWindow)
{
# Look for the 7zip executable.
$pathTo64Bit7Zip = "$path7zip"
$THIS_SCRIPTS_DIRECTORY = Split-Path $script:MyInvocation.MyCommand.Path
$pathToStandAloneExe = Join-Path $THIS_SCRIPTS_DIRECTORY "7za.exe"
if (Test-Path $pathTo64Bit7Zip) { $pathTo7ZipExe = $pathTo64Bit7Zip }
elseif (Test-Path $pathTo32Bit7Zip) { $pathTo7ZipExe = $pathTo32Bit7Zip }
elseif (Test-Path $pathToStandAloneExe) { $pathTo7ZipExe = $pathToStandAloneExe }
else { throw "Could not find the 7-zip executable." }
# Delete the destination zip file if it already exists (i.e. overwrite it).
if (Test-Path $ZipOutputFilePath) { Remove-Item $ZipOutputFilePath -Force }

$windowStyle = "Normal"
if ($HideWindow) { $windowStyle = "Hidden" }

# Create the arguments to use to zip up the files.
# <a title="Command-line interface" href="http://en.wikipedia.org/wiki/Command-line_interface" target="_blank" rel="wikipedia">Command-line argument</a> syntax can be found at: http://www.dotnetperls.com/7-zip-examples
$arguments = "a -t$CompressionType ""$ZipOutputFilePath"" ""$FilesToZip"" -mx9"
if (!([string]::IsNullOrEmpty($Password))) { $arguments += " -p$Password" }

# Zip up the files.
$p = Start-Process $pathTo7ZipExe -ArgumentList $arguments -Wait -PassThru -WindowStyle $windowStyle

# If the files were not zipped successfully.
if (!(($p.HasExited -eq $true) -and ($p.ExitCode -eq 0)))
{
throw "There was a problem creating the zip file '$ZipFilePath'."
}
}

Write "FUNCAO DE ZIP - OK" >> $LOG
Write "######################################" >> $LOG
Write "CONSULTANDO ARQUIVO MAIS RECENTE DA PASTA C:\DRM\PLAN\" >> $LOG
Write "######################################" >> $LOG

#ENTRA NA PASTA DO DRM
cd c:\DRM\PLAN

#ACHA O PLANO MAIS RECENTE
$ARQUIVO = Get-ChildItem PLAN.* | Sort-Object LastWriteTime -descending | foreach { $_.Name} | select -First 1

Write "ARQUIVO MAIS RECENTE: "$ARQUIVO >> $LOG
Write "######################################" >> $LOG

#TESTA SE EXISTE O ARQUIVO, SE NÃO EXISTIR, ENVIA EMAIL INFORMANDO ERRO.
if (!$ARQUIVO) {

#MODIFICA O ASSUNTO DA MENSAGEM
$ASSUNTO=[string]::Concat("ARQUIVO DE DRM NAO FOI ENCONTRADO - " ,$ASSUNTO, " - FALHA!")

#VOLTA PARA A C:\DRM
CD ..

#ENVIA O EMAIL REPORTANDO A FALHA
C:\DRM\SMTPSend.bat $ASSUNTO FALHA.txt >> $LOG

Write "ENVIA EMAIL COM FALHA" >> $LOG
Write "######################################" >> $LOG
}
else {
#ADICIONA COMENTARIOS NO ASSUNTO DO EMAIL
$ASSUNTO=[string]::Concat($ASSUNTO, “ - SUCESSO!")

Write "COPIANDO ARQUIVOS..." >> $LOG
Write "######################################" >> $LOG

#COPIA OS ARQUIVOS DE CONFIGURAÇÃO DO SERVIDOR DE TSM PARA SEREM ZIPADOS

Write "MOVE ARQUIVO PARA A PASTA ZIP..." >> $LOG
#MOVE O PLANO PARA A PASTA ZIP
mv C:\DRM\PLAN\$ARQUIVO C:\DRM\ZIP\$ARQUIVO -Verbose >> $LOG
Write "COPIA OS ARQUIVOS DE INSTRUCAO" >> $LOG
cp C:\DRM\INSTR\* C:\DRM\ZIP\ -Verbose >> $LOG
Write "COPIA DO ARQUIVO DSMSERV.OPT" >> $LOG
cp "C:\Program Files\Tivoli\TSM\Server\dsmserv.opt" C:\DRM\ZIP\ -Verbose >> $LOG
Write "GERANDO O ARQUIVO SYS.out" >> $LOG
dsmadmc -id=$idtsm -pass=$passtsm q sys > C:\DRM\ZIP\SYS.out
Get-ChildItem >> $LOG
Write "######################################" >> $LOG

#ENTRA NA PASTA ZIP
cd C:\DRM\ZIP\

#ZIPA O ARQUIVO COM 7ZIP
Write "ZIPANDO ARQUIVOS..." >> $LOG
Write-ZipUsing7Zip -FilesToZip "C:\DRM\ZIP\*.*" -ZipOutputFilePath "C:\DRM\ZIP\$ARQUIVO.zip" -Password "$senha"
Get-ChildItem C:\DRM\ZIP\*.zip >> $LOG
Write "######################################" >> $LOG

Write "ENVIA EMAIL COM SUCESSO" >> $LOG
#ENVIA O EMAIL COM O ARQUIVO COMO ANEXO
C:\DRM\SMTPSend.bat $ASSUNTO $ARQUIVO >> $LOG
Write "######################################" >> $LOG

Write "MOVE O ZIP PARA A PASTA C:\DRM\ENVIADOS\" >> $LOG
Write "######################################" >> $LOG
#MOVE O ARQUIVO ZIPADO PARA A PASTA ENVIADOS
mv C:\DRM\ZIP\$ARQUIVO.zip C:\DRM\ENVIADOS\$ARQUIVO.zip -Verbose >> $LOG

Write "DELETA ARQUIVOS DA PASTA ZIP" >> $LOG
Write "######################################" >> $LOG
#DELETA O ARQUIVO ORIGINAL
del C:\DRM\ZIP\* -Verbose >> $LOG

#VOLTA PARA A PASTA C:\DRM
cd .. >> $LOG
}

#SAI DO POWERSHELL
Write "SAI DO SCRIPT" >> $LOG
Write "######################################" >> $LOG
exit

Referências:

Função Zip

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s