Ok, điều này có thể đã được trả lời, nhưng tôi mới và đang cố gắng tìm hiểu, vì vậy tôi đoán tôi không "nhận" nó. Tôi có một biến có chứa một bảng thông tin (tôi đã nhận nó từ một truy vấn SQL). Tôi có thể xuất biến thành màn hình và xem bảng, nhưng khi tôi cố gắng xây dựng một email HTML với nó trong cơ thể, nó bị cắt xén.Bảng hiển thị PowerShell Trong Email HTML
Đây là mã:
# 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)
Kết quả trên màn hình trông như thế này:
35
FirstName LastName EMail Count
--------- -------- ----- -----
John Doe [email protected] 51
Jane Doe [email protected] 20
... nhưng cơ thể email trông như thế này:
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
... và vân vân. Tôi đang làm gì sai?
+1 để sử dụng gửi thư với -bodyAsHTML –
Tôi đã thử điều đó, nhưng tôi gặp lỗi. Tôi đã chia sẻ toàn bộ mã, có thể bạn có thể thấy những gì tôi đang làm sai? –
OK, điều đầu tiên là loại bỏ: '$ DataSet.Tables | Định dạng-Bảng -Auto' vì điều đó không làm gì cả. Bạn cần phải lấy '$ DataSet' và nhận được một DataTable,' $ table = $ DataSet.Tables [0] '. Một khi bạn có DataTable sử dụng ví dụ của tôi để tự tạo chuỗi $ html. –