1 votes

Obtenir aucun résultat de requête par e-mail

Ceci est le script PowerShell ci-dessous. Je essaie d'exporter les résultats de la requête dans le corps de l'e-mail. Cependant, l'e-mail ne contient rien sauf les en-têtes de tableau. Pourriez-vous aider à identifier ce qui pourrait être faux /incomplet?

    # Créer un 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)

    # Ce code définit la chaîne de recherche dans la table de la base de données
    $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 
    "

    # Ce code se connecte au serveur SQL et récupère les données
    $MySQLAdminUserName = 'user_name'
    $MySQLAdminPassword = 'password'
    $MySQLDatabase = 'mantis'
    $MySQLHost = ''
    $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]  

    # Créer une version HTML du DataTable
    $html = ""
    foreach ($row in $table.Rows)
    { 
        $html += "" + "" + $row[2] + ""
    }
    $html += "bug_idbug_statusresolutionshort_descdeadline" + $row[0] + "" + $row[1] + ""

# Envoyer l'e-mail
$smtpserver = "smtp.server.net"
$from = "test@test.com"
$to = "test2@test2.com"
$subject = "Hello"
$body = $DataSet.Tables[0] | convertto-html ;
Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body $body -bodyashtml

Erreur après l'exécution du script -

Send-MailMessage : Impossible de convertir 'System.Object[]' en type 'System.String' requis par le paramètre 'Body'. La méthode spécifiée n'est pas prise en charge.
À 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

0voto

Bernie White Points 1024

Send-MailMessage s'attend à une chaîne de caractères et $body semble être un tableau d'objets. Pour supprimer l'ambiguïté, définissez le type de $body en changeant à [string]$body =.

Alors que ConvertTo-Html devrait retourner une chaîne de caractères, vous pouvez vérifier en envoyant la sortie à Get-Member comme ceci :

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

0voto

Clayton Points 4443

Vous ne remplissez jamais $table avec des données. Vous remplissez $dataset. Vous echo $DataSet.Tables[0] à l'écran, mais retournez à utiliser $table pour construire $body. L'édition sélectionne maintenant les colonnes souhaitées:

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

Remplacez col1, col2, col3 par les colonnes que vous voulez afficher, omettez les noms de colonnes retournées qui ne vous intéressent pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X