首页 > 解决方案 > 如何使用 Send-MailMessage 格式化电子邮件中 ​​PowerShell 脚本的 Select Name、LastWriteTime 的输出?

问题描述

我目前有一个脚本,它每天发送一封电子邮件,概述我们环境中不符合要求日期的文件夹的名称和 LastWriteTime。

我正在使用 Send-MailMessage 来执行此操作,但是,当我使用以下代码时,列表的格式在视觉上并不吸引人:

$body+= $Output1 | select name, LastWriteTime | format-list
$body+= $Output2 | select name, LastWriteTime | format-list
$body+= $Output3 | select name, LastWriteTime | format-list

它以下列方式输出结果:

TITLE:

Name          : XXXX.txt
LastWriteTime : 2/8/2020 4:00:16 AM

Name          : XXXX.txt
LastWriteTime : 12/20/2018 12:20:29 AM

TITLE:


Name          : XXXX.Zip
LastWriteTime : 8/8/2019 1:40:09 AM

Name          : XXXX.Zip
LastWriteTime : 11/26/2018 12:00:23 AM

Name          : XXXX.Zip
LastWriteTime : 1/9/2019 9:40:49 AM


TITLE:

Name          : XXXX.Zip
LastWriteTime : 11/26/2018 12:00:23 AM

Name          : XXXX.Zip
LastWriteTime : 1/9/2019 9:40:49 AM

因此,它在电子邮件中没有视觉吸引力,因为它通过在单独的行上打印 Name 和 LastWriteTime 占用了大量空间。我已尝试删除格式列表,而是添加格式表,但这会导致结果在电子邮件中看起来完全无组织,如下所示:

TITLE:

Name          LastWriteTime         
----                -------------         
XXXXXXX_XXX_XXXXXX.txt   2/8/2020 4:00:16 AM   
XXXXXXX_XXX_XXXXXX.txt 12/20/2018 12:20:29 AM

TITLE:

Name           LastWriteTime         
----              -------------         
XXXXXXX_XXXX_XXX.txt  2/8/2020 4:00:16 AM   
XXXXXXX_XXXX_XXX.txt 12/20/2018 12:20:29 AM

TITLE:

Name        LastWriteTime         
----             -------------         
XXXXXXX_XX_190807.zip 8/8/2019 1:40:09 AM   
XXXXXXX_XX_181125.zip    11/26/2018 12:00:23 AM
XXXXXXX_XX_190108.zip 1/9/2019 9:40:49 AM   

有没有办法输出结果,使它们在视觉上看起来很吸引人,因为 Name 和 LastWriteTime 并排并与它们各自的数据对齐,并且看起来是格式化的?

此外,有没有办法使电子邮件报告的某些其他部分以粗体和不同的字体大小显示,并更改“名称”和“LastWriteTime”,以便它们在电子邮件中显示为另一个词,以增强看 :)?

提前致谢!

标签: powershell

解决方案


我找到了一种用一行表格格式获取它的方法:

$emtxt = ""   #  OK, two lines.  Let's initialize the string variable first
Get-childItem "<insert directory path her>" | Foreach {$emtxt += ($_.Name,"`t", $_.LastWriteTime,  "`n")} 

推荐阅读