繁体   English   中英

Powershell邮件脚本

[英]Powershell mail message script

我的脚本有问题。

每天晚上,服务器任务计划程序都会运行一批,在无法更新的PC上创建一个日志。 然后,此PS脚本提取错误日志并发送电子邮件,通知我们有关PC的信息。 错误日志文件是.txt文件,并且文件名每天都会更改以反映日期,例如10172016.txt。

我可以将脚本发送到电子邮件中,并用于提取日志文件并将其放入正文中。 但现在为空白,并显示有关“ +”的错误。

码:

clear

$smtpserver = "test.test.org"

$from="noreply@test.org"

$to="adamh@test.org"

$subject="Update Error Log for" + " " + (get-date -format d)

$message = (Get-Content -path "\\testserver\Departments\IT\Private\test\logs" + "(get-date -f mmddyyyy)" + ".txt" | Out-String )

$mailer = new-object Net.Mail.SMTPclient($smtpserver)

$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)

$msg.IsBodyHTML = $false

$mailer.send($msg)

请帮忙。

您的代码存在(至少)一个问题,即(简化的命令):

Get-Content -path "\path\to\" + "(get-date -f MMddyyyy)" + ".txt"

它必须是(请注意括号和get-date命令周围没有双引号):

Get-Content -path ("\path\to\" + (get-date -f MMddyyyy) + ".txt")

PowerShell具有两种基本的解析模式 - 参数模式表达模式 ,以及了解在重要时应用的 模式 :请参阅Get-Help about_Parsing

简而言之:如果不使用(...) ,PowerShell "\\path\\to\\" + (get-date -f MMddyyyy) + ".txt"视为5个单独的参数,而不是单个合成字符串。


或者,您可以在字符串内插中使用单个双引号字符串,该字符串使用子表达式运算符$(...)嵌入get-date调用:

Get-Content -path "\path\to\$(get-date -f MMddyyyy).txt"

其他观察:

  • 自PowerShell版本3起提供本机Send-MailMessage

  • 2位数字月份的格式字符串是MM ,而不是mm (后者是minutes )。

  • 当使用伪方法语法时, new-object Net.Mail.MailMessage($from,$to,$subject,$body)可以起作用,最好避免使用它,因为它可以掩盖对New-Object工作原理的误解:适当的形式是New-Object Net.Mail.MailMessage -ArgumentList $from,$to,$subject,$body ; 如您所见,因为您正在处理cmdlet ,所以它使用参数模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM