Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?

Ответить
Настройки темы
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?

Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Помогите, пожалуйста. Вот есть скрипт для отправки почты:
Код: Выделить весь код
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 ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mail@mail.ru"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
objEmail.Configuration.Fields.Item ("http://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
Вот как сделать, чтобы всю эту информацию записать в лог-файл?

Отправлено: 16:16, 09-02-2015

 

Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата Iska:
Нет. Только по вышеописанной методике самому обрабатывать ошибки и писать в stderr любое содержимое из объекта «Err». »
Ну в общем мой окончательный вариант получился такой:
Код: Выделить весь код
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("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mail@mail.ru"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
objEmail.Configuration.Fields.Item("http://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
В принципе информации должно хватить, чтобы проанализировать логи. Ну а вообще есть мысли объединить этот вариант и этот (чтобы знать в какой строчке ошибка):
Код: Выделить весь код
cscript "H:\ARCHIVE\Sendmail.vbs" 2>"H:\ARCHIVE\Sendmail_log2.txt""
У меня всё-равно через батник запускается. Но тогда придется 2 раза запускать скрипт отправки почты (для второго раза переделать код, убрав из него всё, что касается записи в лог ошибок). Ну и получится, что в случае отсутствия ошибок, почта отправится дважды.
Цитата:
Ещё раз повторю: сделайте проверку существования файла в самом скрипте. Это будет проще.
Я тоже повторюсь: эту причину я указал в качестве примера. Проверка уже реализована в батнике (скрипт вообще из самого батника создается в процессе работы). А так основная причина для ведения логов это если вообще блокируется отправка почты (антивирус, фаервол, отсутствие инета) или каких то компонентов не хватает для работы самого скрипта.

Последний раз редактировалось V!RTuE, 13-02-2015 в 02:36.


Отправлено: 02:27, 13-02-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата V!RTuE:
Ну в общем мой окончательный вариант получился такой:
Код: Выделить весь код
on error resume next
…
»
Это самый верный и надёжный способ не только вообще не увидеть ошибок, но и не узнать о том, что они были.

«On Error Resume Next» должно находиться перед командой, которая может вызвать ошибку, а не в начале скрипта. Обработка ошибки должна происходить сразу же после команды, которая может вызвать ошибку, и сразу же следом — включение стандартной процедуры обработки ошибок («On Error Goto 0»).

Отправлено: 02:35, 13-02-2015 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
V. 2010 - Ошибка при обновлении Exchange 2010 "Произошла ошибка при выполнении 'ldifde.exe' kudrik_tt Microsoft Exchange Server 0 01-07-2014 08:07
2010 - [решено] При создании сертификата произошла ошибка. Selfcert не удалось создать ваш сертификат okshef Microsoft Office (Word, Excel, Outlook и т.д.) 3 11-11-2010 00:28
[решено] Ошибка при запуске скрипта: error parsing function call klsorat2010 AutoIt 4 24-05-2010 16:04
Ошибка - [решено] Ошибка при запуске скрипта AutoIt 00002010 AutoIt 12 06-03-2010 14:23
Как создать файл с помощью CGI скрипта. lehha Программирование и базы данных 1 20-11-2003 09:48




 
Переход