Não obtendo resultados de consulta no email

1

Este é o script do powershell abaixo. Estou tentando exportar os resultados da consulta para o corpo do email. No entanto, o email não contém nada, exceto os cabeçalhos das tabelas. Alguém poderia ajudar o que poderia estar errado / incompleto?

    # Create a DataTable
    $table = New-Object system.Data.DataTable "bugs"
    $col1 = New-Object system.Data.DataColumn bug_id,([string])
    $col2 = New-Object system.Data.DataColumn bug_status,([string])
    $col3 = New-Object system.Data.DataColumn resolution,([string])
    $col4 = New-Object system.Data.DataColumn short_desc,([string])
    $col5 = New-Object system.Data.DataColumn deadline,([string])
    $table.columns.add($col1)
    $table.columns.add($col2)
    $table.columns.add($col3)
    $table.columns.add($col4)
    $table.columns.add($col5)

    # This code defines the search string in the database table
    $SQLQuery = "SELECT bug_id, 
           bug_status, 
           resolution, 
           short_desc, 
           deadline 
    FROM   bugs 
    WHERE  ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) 
             AND deadline BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY) 
           ) 
            OR ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) 
                 AND deadline BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND 
                                      CURDATE() )

           ORDER BY deadline ASC 
    "

    # This code connects to the SQL server and retrieves the data
    $MySQLAdminUserName = 'user_name'
    $MySQLAdminPassword = 'password'
    $MySQLDatabase = 'mantis'
    $MySQLHost = '<HOSTNAME>'
    $ConnectionString = "server=" + $MySQLHost + ";port=3306;uid=" + $MySQLAdminUserName + ";pwd=" + $MySQLAdminPassword + ";database="+$MySQLDatabase

    [void][system.reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Devolutions\Remote Desktop Manager Free\MySQL.Data.dll")
    $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection
    $Connection.ConnectionString = $ConnectionString
    $Connection.Open()

    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($SQLQuery, $Connection)
    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command)
    $DataSet = New-Object System.Data.DataSet
    $RecordCount = $dataAdapter.Fill($dataSet, "data")
    $DataSet.Tables[0]  

    # Create an HTML version of the DataTable
    $html = "<table><tr><td>bug_id</td><td>bug_status</td><td>resolution</td><td>short_desc</td><td>deadline</td></tr>"
    foreach ($row in $table.Rows)
    { 
        $html += "<tr><td>" + $row[0] + "</td><td>" + $row[1] + "</td></tr>" + "</td></tr>" + $row[2] + "</td></tr>"
    }
    $html += "</table>"

# Send the email
$smtpserver = "smtp.server.net"
$from = "[email protected]"
$to = "[email protected]"
$subject = "Hello"
$body = $DataSet.Tables[0] | convertto-html ;
Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body $body -bodyashtml

Erro após a execução do script -

Send-MailMessage : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Body'. Specified method is not supported.
At C:\Users\ai\Desktop\testMail2.ps1:63 char:85
+ Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body <<<<  $body -bodyashtml
    + CategoryInfo          : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage
    
por SoftwareTestingEnthusiast 25.01.2015 / 20:00

2 respostas

0

Você nunca preenche a tabela $ com nenhum dado. Você está preenchendo $ dataset. Você ecoa $ DataSet.Tables [0] para a tela, mas volta a usar $ table para construir $ body. Editar agora seleciona as colunas desejadas:

$body = $DataSet.Tables[0] | select col1, col2, col3 | convertto-html | out-string

Substitua col1, col2, col3 pelas colunas que você deseja exibir, omita todos os nomes de colunas que você não esteja interessado.

    
por 27.01.2015 / 15:58
0

Send-MailMessage está esperando uma string e $ body parece ser uma matriz de objetos. Para remover a ambigüidade, defina o tipo de $body mudando para [string]$body = .

Embora ConvertTo-Html deva retornar uma string que você pode verificar por piping para Get-Member assim:

$ DataSet.Tables [0] | ConvertTo-html | Get-Member

    
por 26.01.2015 / 02:33