从带有可变主体的命令发送Mail-Mailmessage

时间:2016-08-11 09:13:16

标签: email powershell command

下面的脚本应检查文件是否已创建,并向我们的某个用户发送电子邮件。

问题是我无法在身体中发送多个值。我需要删除"文件"从身体到收到电子邮件。每个文件也有一封电子邮件。我会重写它以发送一封邮件,其中包含所有列出日期的文件。

@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"
  )
)

所以我实际上让它与一些沉重的googeling一起工作(甚至一次到第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!'

1 个答案:

答案 0 :(得分: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也可能会对此表示赞赏。