Ok, esto puede haber sido respondido, pero soy nuevo y trato de aprender, así que supongo que no lo estoy "entendiendo". Tengo una variable que contiene una tabla de información (la obtuve de una consulta SQL). Puedo mostrar la variable en la pantalla y ver la tabla, pero cuando intento crear un correo electrónico HTML con ella en el cuerpo, se confunde.Tabla de visualización de PowerShell En HTML Correo electrónico
Aquí está el código:
# This code sets up the HTML table in a more friendly format
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"
# This code defines the search string in the IssueTrak database tables
$SQLServer = "Blah"
$SQLDBName = "Blah"
$SQLUsername = "Blah"
$SQLPassword = "Blah"
$SQLQuery = "SELECT u.FirstName,u.LastName,u.EMail,COUNT(UserID) as Count
FROM dbo.Issues i with(nolock)
JOIN DBO.Users u with(nolock) on u.UserID = i.NextActionBy
where i.Status='Open'
group by u.FirstName,u.LastName,u.EMail
order by Count(*) desc"
# This code connects to the SQL server and retrieves the data
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; uid = $SQLUsername; pwd = $SQLPassword"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
# This code outputs the retrieved data
$DataSet.Tables | Format-Table -Auto
# This code emails a report regarding the results of the retrieved data
$smtpServer = "Blah"
$smtpFrom = "Blah"
$smtpTo = "Blah"
$messageSubject = "IssueTrak Open Issues By Next Action Report"
$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true
$message.Body = "Here is a listing of open issues in IssueTrak, sorted by Next Action.<br><br>"
$message.Body = $message.Body + $html
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
La salida en la pantalla se ve así:
35
FirstName LastName EMail Count
--------- -------- ----- -----
John Doe [email protected] 51
Jane Doe [email protected] 20
... pero el cuerpo del correo electrónico tiene el siguiente aspecto:
Here is a listing of open issues in IssueTrak, sorted by Next Action.
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
...y así. ¿Qué estoy haciendo mal?
+1 por usar send-mailmessage con -bodyAsHTML –
Lo intenté, pero recibo errores. Compartí el código completo, ¿quizás puedes ver lo que estoy haciendo mal? –
OK, lo primero es deshacerse de: '$ DataSet.Tables | Format-Table -Auto' porque eso no hace nada. Necesita tomar '$ DataSet' y obtener una DataTable,' $ table = $ DataSet.Tables [0] '. Una vez que tenga DataTable, use mi ejemplo para crear manualmente la cadena $ html. –