我有一个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"
我的问题是:我如何添加到此脚本以通过电子邮件发送任何错误消息,或者是否有丢失的文件,重复文件或者由于某种原因(超时等等)进程失败?/ p>
谢谢,
答案 0 :(得分:2)
清除$Error
自动变量并在开始之前将$ErrorActionPreference
设置为SilentlyContinue
。 Send 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
}