powershell - 将附件添加到在 powershell 中生成的电子邮件
问题描述
我正在尝试创建一个执行以下操作的 PS 脚本:
- 运行位于服务器上的 2 个程序
- 检查错误文件
- 将错误文件附加到电子邮件
- 等待 5 分钟,冲洗并重复
到目前为止,我已经有了以下内容,我可以在没有附件的情况下使用它,它只是在电子邮件中发送一个链接。但是我宁愿它们是附件。
目前我得到的错误是“Powershell.exe:找不到接受参数'$null'的位置参数。”。
但我不知道为什么会产生这个?
任何意见,将不胜感激。
#Hide powershell
Powershell.exe -windowstyle hidden {
#Make sure the program isn't running before starting the script
stop-process -Name WorksOrderCompletionImport
stop-process -Name WorksOrderIssuesImport
#Loop condition
While ($true)
{
$i++
#Bind location to string
$files=Get-ChildItem "E:\Production Siemens Interface Files\error"
#Binding the path to the string
$filechecker = 'E:\Production Siemens Interface Files\error\*.csv'
# Sender and Recipient Info for email
$MailFrom = "myemail@domain.com"
$MailTo = "myemail@domain.com"
# Sender Credentials
$Username = "myemail@domain.com"
$Password = "BadBoiPassword"
# Server Info
$SmtpServer = "smtp.office365.com"
$SmtpPort = "587"
# Message content
$Link = "\\SERVER1\E Drive\Production Siemens Interface Files\error"
$MessageSubject = "Errors have been generated in the Production Siemens Interface Files Folder"
$Message = New-Object System.Net.Mail.MailMessage $MailFrom,$MailTo
$Message.IsBodyHTML = $true
$Message.Subject = $MessageSubject
$Message.Body = @'
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>Hello,</p>
<p>Please be advised that errors have been generated in the Siemens Integration Production Folder.</p>
<p>Please follow this link to check : <a href="\\SERVER1\e$\Production Siemens Interface Files\error">Link to error files</a></p>
</body>
</html>
'@
#Start the programs
start-process -filepath "C:\Program Files\Datel Computing\Siemens Integration PRODUCTION\WorksOrderIssuesImport.exe"
start-process -filepath "C:\Program Files\Datel Computing\Siemens Integration PRODUCTION\WorksOrderCompletionImport.exe"
Start-Sleep -s 10
#If statement to control email
if (Test-Path $filechecker)
# Construct the SMTP client object, credentials, and send
{$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer,$SmtpPort)
$Smtp.EnableSsl = $true
$Smtp.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
$attachment = New-Object System.Net.Mail.Attachment –ArgumentList 'E:\Production Siemens Interface Files\error\'$file
$smtp.Attachments.Add($attachment)
$Smtp.Send($Message)}
else { Start-Sleep -s 10
}
#Stop the program
stop-process -Name WorksOrderCompletionImport
stop-process -Name WorksOrderIssuesImport
# Sleep for 300 seconds then loop back
Start-Sleep -s 300
}
}
解决方案
您使用了很多 .net 引用。我认为您可以通过使用现有的 cmdlet Send-MailMessage 来简化此操作。例如:
$PSEmailServer = "smtp.office365.com"
$smtpPort = "587"
$mailFrom = "myemail@domain.com"
$mailTo = "myemail@domain.com"
$messageSubject = "Errors have been generated in the Production Siemens Interface Files Folder"
$attachment = "E:\Production Siemens Interface Files\error\$file"
$body = @'
<p>Hello,</p>
<p>Please be advised that errors have been generated in the Siemens Integration Production Folder.</p>
<p>Please follow this link to check : <a href="\\SERVER1\e$\Production Siemens Interface Files\error">Link to error files</a></p>
'@
Send-MailMessage -From $mailFrom -To $mailTo -Subject $messageSubject -Body $body -BodyAsHtml -Attachments $attachment -Port $smtpPort -UseSsl
推荐阅读
- spring-boot - Spring spring.profiles.include:不读取与配置文件相关的属性
- node.js - 将 Bootstrap 与 npm 和 Node.js 一起使用
- php - 当 PHP 中的两个对象键相同时,数组推入多维数组
- google-apps-script - 使用人员 API 更新联系人组
- apache-spark - 如何划分一个RDD的内容
- azure - 如何获取 Azure 资源组中存在的磁盘快照列表的 VM 名称
- vue.js - 在 Vuetify 数据表中添加类?
- message - 如何在消息队列集成模式中构建数据完整性检查?
- unity3d - 如何为标签、图层游戏对象部分编写自定义检查器?
- python - Flask 中的本地客户端时间