我有一个从远程计算机获取最新事件日志的脚本。 通过outlook向特定人群发送事件日志详细信息。该脚本在运行Powershell ISE时工作正常,但不使用任务调度程序发送电子邮件。 任何帮助,将不胜感激。感谢
脚本如下:
$Recipients="xyz@outlook.com","abc@outlook.com"
Foreach ($name in $Recipients) {
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.Recipients.Add($name)
$Mail.Subject ="Testing"
$Mail.Body ="Demo"
Write-Host "Sending Email"
$Mail.Send()
}
答案 0 :(得分:2)
任务计划程序作为服务运行 - 并且不能在服务中使用Office应用程序(包括Outlook)。
答案 1 :(得分:2)
Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。
如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。
$From = "YourEmail@gmail.com"
$To = "AnotherEmail@YourDomain.com"
$Cc = "YourBoss@YourDomain.com"
$Attachment = "C:\temp\Some random file.txt"
$Subject = "Email Subject"
$Body = "Insert body text here"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential (Get-Credential) -Attachments $Attachment
您也可以考虑使用EWS,有关详细信息,请参阅EWS Managed API, EWS, and web services in Exchange。
答案 2 :(得分:0)
您应该只使用Send-MailMessage而不是尝试使用Outlook COM对象。 这样,您就不必依赖邮件配置文件和其他设置(需要在用于运行任务的用户下的Outlook中设置)。 我还在代码中看到一些奇怪的东西:为每个收件人创建一个新的COM Outlook COM对象,然后尝试发送邮件:将For循环移动到触发器创建Outlook COM对象后似乎更符合逻辑。 / p>