1

Тема: VBS:Как создать лог-файл, если при запуске скрипта произошла ошибка?

Помогите, пожалуйста. Вот есть скрипт для отправки почты:

strEmail = "mail@mail.ru"
strSMTP = "smtp.mail.ru"
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFSO = Nothing
Set objEmail = CreateObject("CDO.Message")
Dim objTextStream, TXT
Set objTextStream = CreateObject("Scripting.FileSystemObject").GetFile("C:\Report.txt").OpenAsTextStream(1)
TXT = objTextStream.ReadAll()
objTextStream.Close
Set objTextStream = Nothing
objEmail.From = "Рога и копыта <mail@mail.ru>"
objEmail.To = "mail@mail.ru"
objEmail.Subject = " 09-02-2015 17:06:51"
objEmail.Textbody = TXT
objEmail.AddAttachment "C:\START.KEY"
objEmail.Configuration.Fields.Item ("htt p://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("htt p://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item ("htt p://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/sendusername") = "mail@mail.ru"
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
objEmail.Configuration.Fields.Item ("htt p://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
objEmail.Configuration.Fields.Update
objEmail.Send

Как сделать, чтобы при ошибке запуска этого скрипта создавался в этой же папке лог-файл, в который записывалась информация об ошибке?
К примеру, при отсутствии файла, который должен быть прикреплен, выдает ошибку:

Script: C:\sendmail.vbs
Line: 16
Char: 1
Error: The system cannot find the file specified

Code: 80070002
Source: CDO.Message.1

Вот как сделать, чтобы всю эту информацию записать в лог-файл?
P.S.: поставил пробелы в htpp, т.к. ограничение на кол-во ссылок

2

Re: VBS:Как создать лог-файл, если при запуске скрипта произошла ошибка?

cscript.exe C:\sendmail.vbs 2>>C:\sendmail.log
Забыл пароль и потерял e-mail.

3

Re: VBS:Как создать лог-файл, если при запуске скрипта произошла ошибка?

shiz пишет:
cscript.exe C:\sendmail.vbs 2>>C:\sendmail.log

Неплохой вариант. Из плюсов то, что показывает в какой строке ошибка. Минус - не пишет код ошибки.

Остановился на таком варианте:

on error resume next
Dim objFS, objEmail, objLog
Dim strEmail, strSMTP, strLog
Dim objTextStream, TXT, s
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objEmail = CreateObject("CDO.Message")
strEmail = "mail@mail.ru"
strSMTP = "smtp.mail.ru"
strLog = "H:\ARCHIVE\Sendmail_log.txt"
Set objTextStream = objFS.GetFile("H:\ARCHIVE\Report.txt").OpenAsTextStream(1)
TXT = objTextStream.ReadAll()
objTextStream.Close
Set objTextStream = Nothing
if (objFS.FileExists(strLog)) then
    set objLog = objFS.OpenTextFile(strLog, 8, False)
else
    Set objLog = objFS.CreateTextFile(strLog, False)
end if
objEmail.From = "Рога и копыта <mail@mail.ru>"
objEmail.To = "mail@mail.ru"
objEmail.Subject = " 13-02-2015 02:42:32"
objEmail.Textbody = TXT
objEmail.AddAttachment "H:\START.KEY"
if Err.Number <> 0 then
    s = ""
    s = "Err.Number: " & Hex(Err.Number) & vbCrLf & _
        "Source: " & Err.Source & vbCrLf & _
        "Reason: " & Err.Description
    objLog.Write(s)
end if
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/sendusername") = "mail@mail.ru"
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
objEmail.Configuration.Fields.Item("htt p://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objEmail.Configuration.Fields.Update
objEmail.Send
if Err.number <> 0 then
    s = ""
    s = "Err.Number: " & Hex(Err.Number) & vbCrLf & _
        "Source: " & Err.Source & vbCrLf & _
        "Reason: " & Err.Description
    objLog.Write(s)
end if
objLog.Close
Set objLog = Nothing
Set objFS = Nothing

Плюс в том, что пишет код и текст ошибки. Также продолжает выполнять работу при ошибках. Минус в том, что не записывает в лог в какой именно строке произошла ошибка. Вообще это возможно чтобы и строку писал в лог, где была ошибка? Если разве что объединить эти 2 варианта как-то, чтобы они записывали в разные (или один файл) ошибки. Но тогда 2 раза письмо может отправится, если ошибок не будет.

4 (изменено: shiz, 2015-02-13 04:13:00)

Re: VBS:Как создать лог-файл, если при запуске скрипта произошла ошибка?

Если есть несколько проверок на ошибки, то они могут сами сообщать, какая сработала.

Если запускать код через ScriptControl, то есть ScriptControl.Error.Line

Забыл пароль и потерял e-mail.