【问题标题】:Powershell: how to format Get-Childitem for email?Powershell:如何为电子邮件格式化 Get-Childitem?
【发布时间】:2012-01-18 17:59:02
【问题描述】:

简单地说,我正在尝试从列出目录内容的 Powershell 脚本发送电子邮件。

为了做到这一点,我将文本存储在一个变量中,然后将此变量插入到Send-MailMessage

我的问题是这个。当我将对象通过管道传递给Out-String 时,它不会插入换行符:

$mailbody += "<p>" + (get-childitem $path | select-object Name | Out-String -width 40) + "</P>"

显然,当在提示符下输入Get-Childitem 时,输出的格式很好地使用换行符,但是当存储到变量然后通过电子邮件发送(在 HTML 电子邮件中)时,没有换行符,这会导致不可读的长文件名字符串。

我该怎么做?

【问题讨论】:

  • 可能是换行符在那里,但没有显示?在 HTML 中,新行被视为空格。
  • 我认为这就是原因,但是当我删除 -BodyAsHtml 开关以确保电子邮件以 plantext 发送时,仍然没有换行符 - 只是空格。
  • 您使用 Outlook 作为邮件客户端吗?如果是这样,除非您关闭“从纯文本消息中删除多余的换行符”设置,否则 Outlook 可能会为您删除换行符。

标签: email powershell format newline


【解决方案1】:

您可以使用ConvertTo-Html cmdlet 来执行此操作:

get-childitem $path | select-object Name | ConvertTo-Html -fragment

它将为您创建一个可以通过 HTML 电子邮件发送的漂亮表格。 -fragment 部分去掉了头部和身体等,只给出了桌子。

【讨论】:

  • 嘿 - 当您知道如何操作时,这非常容易。谢谢一百万!
【解决方案2】:

使用ConvertTo-Html cmdlet 怎么样?填写您的环境信息。

$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 

【讨论】:

  • 谢谢 - 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多