我试图找出如何安排任务每周运行一次,任务计划程序复制两个文件并将它们附加到电子邮件并通过电子邮件发送给一组人。这可能吗?要使用电源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
它不会出错但我仍然没有收到电子邮件
答案 0 :(得分:1)
在您的代码中,$file
是一个字符串,当被解释为只有一个路径时无效。你想要的是一个字符串数组,数组的每个元素都是一个带有一个路径的字符串。您可以使用foreach
或ForEach-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