【问题标题】:SendMessage send attachment that is lockedSendMessage 发送被锁定的附件
【发布时间】:2017-06-08 09:03:49
【问题描述】:

我正在使用标准的 SendMessage 命令在 PowerShell 脚本中发送电子邮件。我想附加一个日志文件,但不幸的是日志文件被父脚本锁定。

有没有办法将文件作为附件发送(我不想删除或写入)?

我知道我可以使用Get-Content 读取该文件,我是否应该将此输出通过管道传输到一个新的临时文件,然后附加该文件?如果这行得通,我将如何去做。

【问题讨论】:

  • 锁定的文件被锁定。您可以找到并强制关闭父进程对该文件的句柄,但我不建议这样做,因为它可能会破坏父进程的操作。如果您可以通过Get-Content 读取文件,您的邮件客户端也应该能够读取该文件。如果您可以控制父级,请尝试使其不要一直保持文件打开。否则我会说你不走运。
  • 如果您使用的“标准 SendMessage 命令”是 Send-MailMessage,那么请更新您的问题,否则人们可能会怀疑您是否使用了不同的东西(这可能非常重要)。
  • 你真的在使用 powershell-v1.0(根据标签)吗?使用 $host 检查 PowerShell 的版本。同样关于标签的话题,sendmessage 标签指的是非电子邮件功能。
  • 由于他声称使用的是 PowerShell v1(我删除了文本中的提及并添加了适当的标签),因此他没有 Send-MailMessage。 AFAIK cmdlet 是在 PowerShell v2 中引入的。
  • 问题不是关于如何发送邮件,而是如何附加锁定的文件。

标签: powershell email locked powershell-1.0


【解决方案1】:

如果您可以使用 Get-Content 读取内容,则 Copy-Item 应该可以工作。

将其复制为临时文件,发送,然后删除。

Copy-Item C:\My_log.log $env:TEMP

PowerShell 2.0 及以上版本

Send-MailMessage -Attachments $env:TEMP\My_log.log .......

PowerShell 1.0 -> PowerShell Send Email

Remove-Item $env:TEMP\My_log.log

【讨论】:

  • Send-MailMessage 在 PowerShell v1 中不可用。
  • 在尝试更改附件之前,请务必运行 $message.Dispose() 以释放对附件的锁定。
猜你喜欢
  • 2011-07-08
  • 2015-02-26
  • 2012-04-29
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多