Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

Power BI | 📌 Automação via PowerShell: Usando Um Script para enviar Relatório por e-Mail - Automation via PowerShell: Using a Script to Email Reports

Power BI | 📌 Automação via PowerShell: Usando Um Script para enviar Relatório por e-Mail - Automation via PowerShell: Using a Script to Email Reports

Se quer um fluxo automático sem Power Automate, pode usar um script PowerShell para:


  1. Tirar um snapshot do relatório.
  2. Enviar um e-mail automaticamente com a imagem.


Esse método requer acesso à API do Power BI e permissões adequadas.


🔹 Pré-requisitos

  • Ter o Power BI aberto no local desejado.
  • Configurar o envio de e-mails via SMTP (Gmail, Outlook ou Exchange).
  • Executar o PowerShell com permissões de administrador.
  • Instalar o módulo Powershell Imaging para capturar a tela.

📝 Script PowerShell

# Definir caminho para salvar a captura de tela
$ImagemPath = "$env:TEMP\PowerBI_Snapshot.png"

# Função para capturar a tela
Add-Type -TypeDefinition @"
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

public class ScreenCapture {
    [DllImport("user32.dll")]
    public static extern IntPtr GetDesktopWindow();
    [DllImport("user32.dll")]
    public static extern IntPtr GetWindowDC(IntPtr hWnd);
    [DllImport("gdi32.dll")]
    public static extern int BitBlt(IntPtr hdcDest, int xDest, int yDest, int wDest, int hDest, IntPtr hdcSrc, int xSrc, int ySrc, int RasterOp);
    [DllImport("gdi32.dll")]
    public static extern bool DeleteDC(IntPtr hdc);
    [DllImport("gdi32.dll")]
    public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
    [DllImport("gdi32.dll")]
    public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
    [DllImport("gdi32.dll")]
    public static extern IntPtr SelectObject(IntPtr hdc, IntPtr h);
    [DllImport("gdi32.dll")]
    public static extern bool DeleteObject(IntPtr ho);
    
    public static void CaptureScreen(string filePath) {
        IntPtr hDesk = GetDesktopWindow();
        IntPtr hSrce = GetWindowDC(hDesk);
        IntPtr hDest = CreateCompatibleDC(hSrce);
        int width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
        int height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
        IntPtr hBmp = CreateCompatibleBitmap(hSrce, width, height);
        IntPtr hOldBmp = SelectObject(hDest, hBmp);
        BitBlt(hDest, 0, 0, width, height, hSrce, 0, 0, 0x00CC0020);
        Bitmap bmp = Image.FromHbitmap(hBmp);
        bmp.Save(filePath, ImageFormat.Png);
        SelectObject(hDest, hOldBmp);
        DeleteObject(hBmp);
        DeleteDC(hDest);
        DeleteDC(hSrce);
    }
}
"@ -Language CSharp

# Capturar a tela do relatório Power BI
[ScreenCapture]::CaptureScreen($ImagemPath)

# Configurações do e-mail
$SMTPServer = "smtp.office365.com"   # Para Outlook | Use "smtp.gmail.com" para Gmail
$SMTPPort = 587
$EmailFrom = "seuemail@seudominio.com"
$EmailTo = "destinatario@seudominio.com"
$EmailSubject = "Snapshot do Relatório Power BI"
$EmailBody = "Segue em anexo a captura de tela do relatório Power BI."
$SMTPUser = "seuemail@seudominio.com"
$SMTPPassword = "suasenha"

# Criar e enviar o e-mail
Send-MailMessage -From $EmailFrom -To $EmailTo -Subject $EmailSubject -Body $EmailBody `
-Attachments $ImagemPath -SmtpServer $SMTPServer -Port $SMTPPort -UseSsl `
-Credential (New-Object System.Management.Automation.PSCredential ($SMTPUser, (ConvertTo-SecureString $SMTPPassword -AsPlainText -Force)))

Write-Host "E-mail enviado com sucesso!"

🛠 Configurações Necessárias

  1. Troque seuemail@seudominio.com e suasenha pelas suas credenciais.
  2. Se usar Gmail, ative "Permitir aplicativos menos seguros" ou gere uma senha de aplicativo.
  3. Mude o SMTP dependendo do provedor de e-mail:
    • Outlook: smtp.office365.com (porta 587).
    • Gmail: smtp.gmail.com (porta 587).
    • Exchange: smtp.office365.com (para Microsoft 365).

🎯 Como Rodar o Script?

  1. Salve o código como EnviarRelatorio.ps1.
  2. Abra o PowerShell como Administrador.

.\EnviarRelatorio.ps1

3. O script capturará a tela e enviará um e-mail com a imagem anexada. 

 

🔥 Vantagens Desta Abordagem

Automatiza a captura de tela do relatório Power BI.
Envia automaticamente um e-mail com o snapshot.
Funciona sem precisar do Power Automate (economizando licenças).
✅ Adaptável para rodar periodicamente via Agendador de Tarefas do Windows.


👉 Não se esqueça de seguir André Bernardes no Linkedin. Clique aqui e me contate via What's App. 

Comente e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias