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

Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

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



Код:

Код: Выделить всё

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 = "Рога и копыта "
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

Вот как сделать, чтобы всю эту информацию записать в лог-файл?
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата V!RTuE:



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




А Вы не оставляйте это на волю случая, проверяйте существование файла, который должен быть прикреплён, внутри скрипта.




Цитата V!RTuE:



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




Запускайте скрипт посредством «cscript.exe», а не «wscript.exe», и перенаправьте вывод потока ошибок в файл.



P.S. Логику:


Цитата V!RTuE:





Код:

Код: Выделить всё

Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFSO = Nothing

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




не понял Изображение.
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата Iska:



Запускайте скрипт посредством «cscript.exe», а не «wscript.exe», и перенаправьте вывод потока ошибок в файл.
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




а как это правильно делается? Так?





Код:

Код: Выделить всё

cscript "С:\sendmail.vbs">"C:\my.log"

Если да, то он пишет только это:



HTML код:

Код: Выделить всё

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
C:\cons.exe



Если убрать в коде 4 строки (про которые ниже написал), то запишет без C:\cons.exe


Цитата Iska:



P.S. Логику:

Цитата V!RTuE:

Код:

Dim objFSO

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Set objFSO = Nothing

»

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




я неправильно скопировал)) Вот что там у меня. Хотя я уже сам не помню зачем оно надо. Без этих строк тоже всё работает)))



Код:

Код: Выделить всё

echo Dim objFSO
echo Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
echo WScript.Echo objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "cons.exe")
echo Set objFSO = Nothing
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата V!RTuE:



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




Нет. Так Вы перенаправляете только стандартный поток вывода («stdout»), а надо — поток ошибок («stderr»):



Код:

Код: Выделить всё

cscript.exe "С:\sendmail.vbs" 2>"C:\my.log"

тогда поток вывода пойдёт по-прежнему на консоль, а поток ошибок будет перенаправлен в файл.
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата Iska:



А Вы не оставляйте это на волю случая, проверяйте существование файла, который должен быть прикреплён, внутри скрипта.
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




у меня основной код в батнике. И там проверка уже реализована на наличие файлов. Вот пример:



Код:

Код: Выделить всё

SET f=%~dp0
if exist "%f%START.KEY" echo objEmail.AddAttachment "%f%START.KEY">>"%f%ARCHIVE\sendmail.vbs"

Просто отправка почты у меня реализована созданием и запуском скрипта из батника Изображение

А вообще я не удачный пример привел на счет отсутствия файла. Основная причина, по которой мне надо вести лог ошибки, это когда вообще скрипт не может отработать нормально. Вот например такая ошибка на некоторых компьютерах возникает:



Скрытый текст

[spoiler]Изображение[/spoiler]




И пока не знаю как она решается ((
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата V!RTuE:



у меня основной код в батнике. И там проверка уже реализована на наличие файлов. Вот пример:
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Я бы предпочёл делать сие непосредственно в скрипте. И вообще целиком перейти на WSH (или PoSH) с пакетных файлов, нежели пользовать подобную «солянку».




Цитата V!RTuE:



И пока не знаю как она решается ((
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Например, так:



Код:

Код: Выделить всё

Option Explicit
Dim objMessage
On Error Resume Next
Set objMessage = WScript.CreateObject("CDO.Message")
If Err.Number = 0 Then
	On Error Goto 0
	'…
	'…
	'…
	Set objMessage = Nothing
Else
	Err.Clear
	On Error Goto 0
	WScript.Echo "Can't create object [CDO.Message]"
	WScript.Quit 1
End If
WScript.Quit 0

К сожалению, в VBScript нет удобного механизма «try… catch… finally», наличествующего в JScript.



P.S. При использовании механизма перенаправления потока ошибок, описанного выше, стоит писать именно туда, т.е., не:



Код:

Код: Выделить всё

WScript.Echo "Can't create object [CDO.Message]"

а:



Код:

Код: Выделить всё

WScript.StdErr.WriteLine "Can't create object [CDO.Message]"
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата Iska:



Я бы предпочёл делать сие непосредственно в скрипте. И вообще целиком перейти на WSH (или PoSH) с пакетных файлов, нежели пользовать подобную «солянку».
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Может так и лучше будет, но я не программист (юрист по образованию). Для меня и батники не так легко даются. Ну а во-вторых уж слишком много действий выполняет батник (почти 800 строк кода). А в-третьих, надо сделать универсальным, чтобы работало на любой ОС (от Win 2000 до серверных). Если интересно, и можете подсказать как лучше реализовать, то полную версию батника могу выслать в лс.




Цитата:



Например, так:



Скрытый текст

[spoiler]Option Explicit



Dim objMessage





On Error Resume Next

Set objMessage = WScript.CreateObject("CDO.Message")



If Err.Number = 0 Then

On Error Goto 0



'…

'…

'…



Set objMessage = Nothing

Else

Err.Clear

On Error Goto 0



WScript.Echo "Can't create object [CDO.Message]"

WScript.Quit 1

End If



WScript.Quit 0[/spoiler]






а тут вообще не понял куда свой код вставлять (( Знаний по VBS практически нет у меня
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата V!RTuE:



А в-третьих, надо сделать универсальным, чтобы работало на любой ОС (от Win 2000 до серверных).
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Тогда только WSH. И всё равно — набор классов Wbem и их свойств и методов различен для разных ОС.




Цитата V!RTuE:



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




Не стоит.




Цитата V!RTuE:



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




Надо учиться. Ваш код должен находиться там, где закомментированные многоточия. Но просто «взять и вставить» не получится.
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата Iska:



cscript.exe "С:\sendmail.vbs" 2>"C:\my.log"
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Возник еще один вопрос. В лог пишется такая информация:



Код:

Код: Выделить всё

C:\sendmail.vbs(16, 1) CDO.Message.1: The system cannot find the file specified.

а возможно чтобы еще и записывало "Code: 80070002"? Он ведь есть во всплывающем окне.
Аватара пользователя
V!RTuE

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

Сообщение V!RTuE »

Цитата V!RTuE:



а возможно чтобы еще и записывало "Code: 80070002"? Он ведь есть во всплывающем окне.
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?




Нет. Только по
VBS/WSH/JS - [решено] Как создать лог-файл, если при запуске скрипта произошла ошибка?
самому обрабатывать ошибки и писать в stderr любое содержимое из объекта «Err».



Ещё раз повторю: сделайте проверку существования файла в самом скрипте. Это будет проще.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»