none
Enviar relatórios de backup por e-mail formatando o texto RRS feed

  • Pergunta

  • Boa tarde senhores,

    QUESTÃO:

    Tenho uma questão em Powershell, existe alguma forma de pegar um texto em um arquivo .txt, formatar palavras específicas na cor vermelha e enviar o texto formatado por e-mail?

    PRA EXPLICAR:

    O que eu quero é: Eu gravo os resultados dos meus backups via script, em um banco SQL e via script eu faço um select no banco, pego esses resultados e gravo num arquivo .txt e uso o Get-Content para pegar o conteúdo desse arquivo e enviar por e-mail, mas eu gostaria de poder alterar a cor do resultado "ERRO" para vermelho, e enviar por e-mail, para destacar os resultados de falha dos backups, podem me ajudar?

    MEU SCRIPT

    echo off

    $dataSource = ".\SQLEXPRESS"
    $user = "ok"
    $pwd = "ok"
    $database = "ok"
    $connectionString = "Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;"

    $query = "select nome, resultado, data, hora, log from tb_ok ORDER BY id"

    $connection = New-Object System.Data.SqlClient.SqlConnection
    $connection.ConnectionString = $connectionString
    $connection.Open()
    $command = $connection.CreateCommand()
    $command.CommandText = $query

    $result = $command.ExecuteReader()

    $table = new-object “System.Data.DataTable”
    $table.Load($result)

    $format = @{Expression={$_.nome};Label="Nome"},@{Expression={$_.resultado};Label="Resultado"},@{Expression={$_.data};Label="Data"},@{Expression={$_.hora};Label="Hora"},@{Expression={$_.log};Label="Log"}

    $date = Get-Date -format "dd/MM/yyyy"
    $table | Where-Object {$_.data -like "$date"} | format-list $format | Out-File "C:\Users\ok\Desktop\Backup\result.txt"

    $dados = Get-Content "C:\Users\ok\Desktop\Backup\result.txt" | Out-String

    $connection.Close()

    #Envio E-mail
    $SMTPServer = "ok.com.br"
    $SMTPPort = "587"
    $username = "ok@ok.com.br"
    $password = "ok"

    $to = "equipe.ok@ok.com.br"
    #$cc = ""
    $subject = "Informativo dos backups realizados!"
    $body = "Abaixo seguem os backups do OK: $dados"
    #$attachment = “C:\Script\Anexo1.htm”
    #$attachment2 = “C:\Script\Anexo2.htm”

    $message = New-Object System.Net.Mail.MailMessage
    $message.subject = $subject
    $message.body = $body
    $message.to.add($to)
    #$message.cc.add($cc)
    $message.from = $username
    #$message.attachments.add($attachment)
    #$message.attachments.add($attachment2)

    $smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
    $smtp.EnableSSL = $true
    $smtp.Credentials = New-Object System.Net.NetworkCredential($username, $password);
    $smtp.send($message)

    terça-feira, 14 de abril de 2020 20:31

Respostas

Todas as Respostas

  • Olá amigo,

    Acredito que seja algo parecido com o que é descrito nesse link:

    https://practical365.com/exchange-server/powershell-html-email-formatting/

    * Está em inglês.


    R. Bohner

    quarta-feira, 15 de abril de 2020 14:40
  • Boa tarde Ricardo,

    Cara, top demais a sua resposta, consegui com muito esforço adaptar a sua referência ao meu código e pegar o resultado do select do banco e formatar na tabela em HTML, conforme o seu artigo.

    Agora o próximo passo é formatar a cor do texto, quando for ERRO, para a cor vermelha, mas em partes sua resposta resolveu minha questão.

    Agora, não vai ser fácil, mas vou então tentar criar uma condição para que quando a palavra ERRO for encontrada no select do banco, ele mude a cor da fonte para vermelho, se tiver alguma sugestão eu agradeço.


    sexta-feira, 17 de abril de 2020 16:53