PowerShell:如何为电子邮件格式化Get-Childitem?

4
简单来说,我正在尝试从Powershell脚本发送一封电子邮件,其中列出了一个目录的内容。
为了做到这一点,我将文本存储在一个变量中,然后将该变量插入到“Send-MailMessage”中。
我的问题是这样的。当我使用以下命令将对象导向“Out-String”时,它不会插入换行符:
$mailbody += "<p>" + (get-childitem $path | select-object Name | Out-String -width 40) + "</P>"

显然,当在提示符中输入Get-Childitem时,输出格式有适当的换行符,但是当存储到变量中并通过电子邮件发送(在HTML电子邮件中),就没有换行符,这导致了一个不可读的、很长的文件名字符串。
我该怎么做?

新行可能存在,但没有显示出来吗?在HTML中,新行被视为空白字符。 - theglauber
我原以为这是原因,但是当我移除了 -BodyAsHtml 开关以确保电子邮件以纯文本形式发送时,仍然没有换行符 - 只有空格。 - hazymat
你使用Outlook作为邮件客户端吗?如果是的话,除非你关闭了“从纯文本消息中删除额外换行符”的设置,否则Outlook可能会自动删除换行符。 - theglauber
2个回答

7
你可以使用ConvertTo-Html命令来完成这个任务:
get-childitem $path | select-object Name | ConvertTo-Html -fragment

它将为您创建一个漂亮的表格,可用于发送HTML电子邮件。 -fragment 部分删除头和正文等内容,只保留表格。

嘿 - 当你知道如何做时,这非常简单。谢谢! - hazymat

2
如何使用 ConvertTo-Html 命令?请填写您的环境信息。
$path = "C:\"
[string] $html = dir $path | ConvertTo-Html

$smptServer = ''
$to = ''
$from = ''
$subject = 'Test'
Send-MailMessage -To $to -From $from -Body $html -BodyAsHtml -SmtpServer $smptServer -Subject $subject

编辑 - 这个方法可以使用,但邮件看起来很糟糕。如果你想让它的显示效果像在PowerShell窗口执行 dir 命令时一样,可以使用以下方法:

[string] $html = dir $path | Select Mode, LastWriteTime, Length, Name | ConvertTo-Html 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接