Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
964 / 331 / 47
Регистрация: 30.01.2015
Сообщений: 1,440
1
VBS

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

09.02.2015, 15:20. Показов 4394. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста. Вот есть скрипт для отправки почты:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
Вот как сделать, чтобы всю эту информацию записать в лог-файл?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2015, 15:20
Ответы с готовыми решениями:

Spyder: При запуске ядра произошла ошибка
Возможно, проблема связана с символами юникода в адресной строке, но это не точно. Как исправить? ...

Произошла непредвиденная ошибка. (42) при запуске программы StairDesigner
Здравствуйте Форумчане. Проблема такая. Установил программу StairDesigner (версия 6.51, программа...

Что делать, если при изменении структуры диска произошла ошибка?
При помощи acronis disk director (для windows) поменял жесткий диск с динамического на базовый....

Произошла ошибка при попытке создать объект
Доброго времени суток, форумчане! Нужна ваша помощь. При помещении UserControl на форму через...

3
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
09.02.2015, 20:38 2
Цитата Сообщение от V1RTuE Посмотреть сообщение
Вот как сделать, чтобы всю эту информацию записать в лог-файл?

В начале скрипта поместить такой код:

Visual Basic
1
2
3
4
5
6
7
With WScript
 If InStrRev(LCase(.FullName), LCase("wscript.exe")) Then
  CreateObject("WScript.Shell").Run "cmd /c cscript //nologo """ &_
  .ScriptFullName & """ 2>""errors.log""", 0
  .Quit
 End If
End With
.
2
964 / 331 / 47
Регистрация: 30.01.2015
Сообщений: 1,440
09.02.2015, 21:40  [ТС] 3
Цитата Сообщение от ComSpec Посмотреть сообщение
В начале скрипта поместить такой код:
Спасибо, работает. Но есть нюанс - не всё показывает. Т.е. в файле я вижу
C:\sendmail.vbs(16, 1) CDO.Message.1: The system cannot find the file specified.
а возможно чтобы еще и записывало "Code: 80070002"? Он ведь есть во всплывающем окне.

И 2 вопрос. Нашел команду On Error Resume Next, при которой игнорирует ошибки и продолжает выполнение скрипта. Можно ли как это совместить с ней? Чтобы и скрипт выполнялся в случае ошибки и саму ошибку записывал в файл?
0
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
10.02.2015, 12:57 4
V1RTuE, с применением обработки ошибок On Error Resume Next ваш скрипт будет примерно таким:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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 = "log.txt"
 
Set objTextStream = objFS.GetFile("C:\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 = " 09-02-2015 17:06:51"
objEmail.Textbody = TXT
 
 
objEmail.AddAttachment "C:\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)
 
    msgbox(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") = 465
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strEmail
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "passwd"
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)
 
    msgbox(s)
end if
 
objLog.Close
Set objLog = Nothing
Set objFS = Nothing
только номера строк с ошибками в лог не попадут, т.к. в объекте Err. их нет
1
10.02.2015, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2015, 12:57
Помогаю со студенческими работами здесь

Как запрограммировать запись в лог при выполнении скрипта?
скрипт запускается при входе пользвоателя в систему средствами гпо. но не всегда срабатывает....

Ошибка при запуске скрипта
Доброго времени суток! Я столкнулся с проблемой: при реализации простейшего цикла for...do...done...

Ошибка при запуске mono - "Произошла одна или несколько ошибок"
здравствуйте! подскажите пожалуйста как избавиться от этой ошибки? заранее спасибо!

При подписи произошла ошибка: Файл SignTool.exe не найден
Решился таки почистить компьютер, проект был скопирован в облачное хранилище(создан в 15-й студии)....

При подписи произошла ошибка: Файл SignTool.exe не найден
Добрый вечер! Не удается скомпилировать проект: C#, WPF .net framework 4 В подписывании...

Ошибка при запуске скрипта PHP
Скрипт отправки письма после регистрации на сайте. Из-за того, что много пользователей начало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru