格式化电子邮件的数据库查询结果
Format database query result for email
我有一个用于 运行 MySQL 查询的模块。通常它只用于更新数据库,为此它工作正常。但现在我需要得到结果并通过电子邮件 return。
我的模块结束于:
return $dataSet.Tables["data"]
我可以使用
在屏幕上显示这个结果集
$result1 | Format-Table -AutoSize
但是当我尝试将它添加到我的电子邮件时它不起作用。
我尝试了多种选择,并且
$body = ($result1 | Format-Table -AutoSize | Out-String)
最接近,但不对齐任何列和 headers。
有更好的方法吗?
这些列可能看起来没有对齐,因为大多数 GUI 邮件客户端使用比例字体。对于对齐的列,您需要使用等宽字体或 HTML table 显示的文本。您可以使用 ConvertTo-Html
cmdlet 将结果转换为这样的 table:
$htmlbody = $result1 | ConvertTo-Html
Send-MailMessage ... -Body $htmlbody -BodyAsHtml
在我的测试中,转换从隐藏属性中产生了一些不需要的列,因此您可能需要 select 来自 $result1
的特定属性。
如果您还想要 HTML 正文中的其他自定义文本,您可以将 table 转换为一个 HTML 片段(只有 table HTML 格式)并将其插入更大的 HTML 字符串:
$htmltemplate = @"
<html>
<head>...</head>
<body>
<p>{0}</p>
{1}
</body>
</html>
"@
$table = $result1 | ConvertTo-Html -Fragment
$htmlbody = $htmltemplate -f 'my custom text', $table
Send-MailMessage ... -Body $htmlbody -BodyAsHtml
我有一个用于 运行 MySQL 查询的模块。通常它只用于更新数据库,为此它工作正常。但现在我需要得到结果并通过电子邮件 return。
我的模块结束于:
return $dataSet.Tables["data"]
我可以使用
在屏幕上显示这个结果集$result1 | Format-Table -AutoSize
但是当我尝试将它添加到我的电子邮件时它不起作用。
我尝试了多种选择,并且
$body = ($result1 | Format-Table -AutoSize | Out-String)
最接近,但不对齐任何列和 headers。
有更好的方法吗?
这些列可能看起来没有对齐,因为大多数 GUI 邮件客户端使用比例字体。对于对齐的列,您需要使用等宽字体或 HTML table 显示的文本。您可以使用 ConvertTo-Html
cmdlet 将结果转换为这样的 table:
$htmlbody = $result1 | ConvertTo-Html
Send-MailMessage ... -Body $htmlbody -BodyAsHtml
在我的测试中,转换从隐藏属性中产生了一些不需要的列,因此您可能需要 select 来自 $result1
的特定属性。
如果您还想要 HTML 正文中的其他自定义文本,您可以将 table 转换为一个 HTML 片段(只有 table HTML 格式)并将其插入更大的 HTML 字符串:
$htmltemplate = @"
<html>
<head>...</head>
<body>
<p>{0}</p>
{1}
</body>
</html>
"@
$table = $result1 | ConvertTo-Html -Fragment
$htmlbody = $htmltemplate -f 'my custom text', $table
Send-MailMessage ... -Body $htmlbody -BodyAsHtml