Powershell抓取2个文件并通过电子邮件发送给一群人

时间:2017-08-29 13:05:53

标签: powershell

我试图找出如何安排任务每周运行一次,任务计划程序复制两个文件并将它们附加到电子邮件并通过电子邮件发送给一组人。这可能吗?要使用电源shell运行的脚本从某些位置获取两个文件,然后通过电子邮件发送它们?它会与我下面的相似,还是我走向错误的方向?

$ol = New-Object -comObject Outlook.Application 
$message = $ol.CreateItem(0)
$message.Recipients.Add("Deployment")  
$message.Subject = "Website deployment"  
$message.Body = "See attached file"

$file = "K:\Deploy-log.csv, K:\Deploy-log2.csv"
$message.Attachments.Add($file)

错误

  

使用“1”参数调用“Add”的异常:“文件名或目录   名称无效。“在C:\ Users \ davidb \ Desktop \ email.ps1:8 char:1   + $ message.Attachments.Add($ file)

     
      
  • FullyQualifiedErrorId:ComMethodTargetInvocation
  •   

如果我关闭, K:\Deploy-log2.csv它不会出错但我仍然没有收到电子邮件

1 个答案:

答案 0 :(得分:1)

在您的代码中,$file是一个字符串,当被解释为只有一个路径时无效。你想要的是一个字符串数组,数组的每个元素都是一个带有一个路径的字符串。您可以使用foreachForEach-Object循环遍历数组,在每个单独的路径上使用Add()一次。看起来像这样:

$ol = New-Object -comObject Outlook.Application 
$message = $ol.CreateItem(0)
$message.Recipients.Add("Deployment")  
$message.Subject = "Website deployment"  
$message.Body = "See attached file"

$files = "K:\Deploy-log.csv","K:\Deploy-log2.csv"
foreach ($file in $files) {
    $message.Attachments.Add($file)
}
$message.Send()

或者,您可以使用Send-MailMessage cmdlet

 Send-MailMessage -From 'Sender <Sender@example.com>' -To "Recipient <Recipient@example.com>" -Subject "Website deployment" -Body "See attached file" -Attachments @("K:\Deploy-log.csv", "K:\Deploy-log2.csv") -SmtpServer smtp.example.com