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.

Mostrando postagens com marcador script PowerShell. Mostrar todas as postagens
Mostrando postagens com marcador script PowerShell. Mostrar todas as postagens

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
diHITT - Notícias