【问题标题】:Send-Mailmessage from command with variable body从带有可变正文的命令发送邮件消息
【发布时间】:2016-12-17 22:34:06
【问题描述】:

以下脚本应检查今天是否已创建文件并向我们的一位用户发送电子邮件。

问题是我不能在正文中发送多个值。我需要从正文中删除“文件”才能将电子邮件发送出去。每个文件还有一封电子邮件。我会重写它以发送一封邮件,其中包含列出日期的所有文件。

@echo off
setlocal enabledelayedexpansion
echo Files changed today %date%

FOR %%A IN (*.*) DO (
  set tf=%%~tA
  set fd=!tf:~0,10!
  if !fd!==%date% ( 
    powershell -ExecutionPolicy ByPass -Command Send-MailMessage ^
      -SmtpServer this.server.com ^
      -To my@email.com ^
      -From noreply@possibly.fake ^
      -Subject Updated^
      -Body "%%A File"
  )
)

所以我实际上是通过一些繁重的谷歌搜索来完成这项工作的(甚至一度进入第 3 页)

这是我的“检查文件夹中的文件并发送包含新旧内容的电子邮件”

@echo off
setlocal enabledelayedexpansion
echo Files changed today %date%
FOR %%A IN (*.*) DO (
  set tf=%%~tA
  set fd=!tf:~0,10!
  if !fd!==%date% ( 
      set "file=!file! <br> %%A !tf!"
    )
  if NOT !fd!==%date% ( 
      set "old=!old! <br> %%A !tf!"
    )
)
set "file=!file!
set "old=!old!

set "today=<b>New today:</b> %file%"
set "older=<b>Older files</b> %old%"
set "body=!today! <br><br> !older!"

powershell -ExecutionPolicy ByPass -Command Send-MailMessage -BodyAsHtml^
        -SmtpServer yourserver.com^
        -To your@mail.com ^
        -From noreply@possibly.fake ^
        -Subject Updated^
        -Body '!body!'

【问题讨论】:

  • 删除批处理并在 PowerShell 中编写整个内容。

标签: email powershell command


【解决方案1】:

[Im]没有批处理文件的纯PowerShell解决方案,将其保存到扩展名为.ps1的文件中:

$modifiedToday = gci | ?{ $_.LastWriteTime.Date -eq (Get-Date).Date }
Send-MailMessage `
    -SmtpServer this.server.com `
    -To my@email.com `
    -From noreply@possibly.fake `
    -Subject Updated `
    -Body ($modifiedToday -join "`n")

不纯,因为它使用缩写别名,例如 gci?{,而不是 Get-ChildItem 和 Where-Object,因为我真的不喜欢官方推荐的 PowerShell 代码样式的冗长。作为不介意编写神秘的批处理文件代码的人,OP 可能也会欣赏这一点。

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 2020-11-02
    • 1970-01-01
    • 2021-04-29
    • 2019-12-18
    • 1970-01-01
    • 2012-12-09
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多