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
设置为SilentlyContinue
。 Send 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
}
我有一个 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
设置为SilentlyContinue
。 Send 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
}