Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
967 / 334 / 47
Регистрация: 30.01.2015
Сообщений: 1,446
VBS

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

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

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста. Вот есть скрипт для отправки почты:
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2015, 15:20
Ответы с готовыми решениями:

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

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

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

3
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
09.02.2015, 20:38
Цитата Сообщение от 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
967 / 334 / 47
Регистрация: 30.01.2015
Сообщений: 1,446
09.02.2015, 21:40  [ТС]
Цитата Сообщение от 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
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2015, 12:57
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru