使用Powershell发送电子邮件错误

时间:2015-03-24 22:12:34

标签: powershell powershell-v2.0 powershell-v3.0 powershell-ise

我有一个PowerShell脚本,它在文件夹中查找文件并将其移动到另一个文件夹,并使用日期扩展名重命名该文件。 像这样:

    $a = "\\server\Users\Desktop\why agile.docx"
$f = "\\server\Users\desktop\Archive\why agile.docx"

Move-item $a $f

Function renameFile ($location, $filename, $extension)
{
    $d = get-date -uformat "%Y%m%d"

    $old = $location + $filename + $extension
    $new = $filename + "_" + $d + $extension
    rename-item $old $new
}

renamefile -location "\\server\Users\desktop\Archive\" -filename "why agile" -extension ".docx"

我的问题是:我如何添加到此脚本以通过电子邮件发送任何错误消息,或者是否有丢失的文件,重复文件或者由于某种原因(超时等等)进程失败?

谢谢,

3 个答案:

答案 0 :(得分:2)

清除$Error自动变量并在开始之前将$ErrorActionPreference设置为SilentlyContinueSend an e-mail如果$Error变量的内容在您完成后不为空,则为{{3}}:

$Error.Clear()
$eap = $ErrorActionPreference
$ErrorActionPreference = 'SilentlyContinue'

renamefile ...

if ($Error) {
  Send-MailMessage -From $sender -To $recipient -Body ($Error -join "`n") ...
}

$ErrorActionPreference = $eap

为了处理丢失或重复的文件,请添加适当的检查。

答案 1 :(得分:1)

要扩展另一个答案,您可以将代码包装在try块中,然后在catch块中,通过电子邮件发送错误。

这样的东西
try {
    rename file ...
}
catch [Exception] {
    Send-MailMessage ...
}

答案 2 :(得分:0)

这就是我最终做的事情。我使用了try { } catch { },效果很好。感谢大家的帮助......它让我指出了正确的方向。我是Powershell的新手。

    try 
{
$a = "\\servername\Users\Desktop\agile.docx"
$b = "\\servername\Users\Desktop\Archive\agile.docx"


Move-item $a $b -ErrorAction stop

Function renameFile ($location, $filename, $extension)
{
    $d = get-date -uformat "%Y%m%d"

    $old = $location + $filename + $extension
    $new = $filename + "_" + $d + $extension
    rename-item $old $new
}

renamefile -location "\\servername\Users\desktop\Archive\" -filename "Agile" -extension ".docx"

}
Catch
{
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $_.Exception.ItemName
    Send-MailMessage -From my.name@mycompany.com -To her.name@mycompany.com -Subject "Files Failed to Transfer to Archive Folder!" -SmtpServer smtp... -Body "The error message is: '$ErrorMessage'"
    Break
}