Powershell 的电子邮件错误

Email Errors with Powershell

我有一个 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"

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

谢谢,

清除$Error 自动变量并在开始前将$ErrorActionPreference 设置为SilentlyContinueSend an e-mail 使用 $Error 变量的内容,如果它在完成后不为空:

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

renamefile ...

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

$ErrorActionPreference = $eap

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

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

类似于

try {
    rename file ...
}
catch [Exception] {
    Send-MailMessage ...
}

这是我最后做的。我使用了 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
}