Зачастую мы разрабатываем сценарии для того, чтобы выполнять их по расписанию, при применении политик и так далее. Другими словами, за исполнение сценария мы не наблюдаем, а контролировать возможные ошибки при исполнении сценария всё-таки необходимо. Предлагаю Вашему вниманию унифицированную в некоторой степени обёртку сценария WSH, обеспечивающую регистрацию любых исключений сценария в журнале событий в достаточно информативном виде, чтобы понять суть проблемы по журналу:

<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<package>
	<job id="displaySinks">
	<?job error="true" debug="false" ?>
		<runtime>
			<description>Отображение зарегистрированных обработчиков (sink) SMTP.</description>
			<example><![CDATA[
Пример:

cscript smtpreg.wsh //job:displaySinks

]]>			</example>
		</runtime>

		<object progid="Event.Manager" id="eventManager"/>

<script language="JScript"><![CDATA[

var wsh = WScript.CreateObject("WScript.Shell");

// инициализация -----------------------------------------------------------------------

... специфичные для сценария

// -------------------------------------------------------------------------------------

function debugInformation (
	operation
)
{
	if (operation) this.operation = operation;
};

debugInformation.prototype.operation = "";
debugInformation.prototype.step = null;

debugInformation.prototype.registerError = function (
	error
) {
	var errMsg =
		"[" + this.operation + "] : Ошибка"
		+ (this.step ? " (" + this.step + ")" : "")
		+ ":"
		+ (error.number ? error.number & 16383 : "")
		+ (error.description ? " \"" + error.description + "\"" : "")
		+ "."
	;
//	WScript.StdOut.Write(errMsg + "\n");
	wsh.LogEvent(1, errMsg);
};

debugInformation.prototype.main = function (
) {
	try {
		main();
	} catch(e) {
		this.registerError(e);
	};
};

function errorDescription(
	description,
	number
)
{
	this.description = description ? description : "неожиданная ошибка";
	this.number = number ? number : 0;
};

debugInformation.prototype.error = function (
	description,
	number
) {
	var e = new errorDescription(description, number);
	throw (e);
};

debugInformation.prototype.info = function (
	description
) {
	var errMsg =
		"[" + this.operation + "] : информация "
		+ (this.step ? " (" + this.step + ")" : "")
		+ ":"
		+ (description ? description : "")
		+ "."
	;
//	WScript.StdOut.Write(errMsg + "\n");
	wsh.LogEvent(0, errMsg);
};

debugInformation.prototype.controlErrorStatus = function (
	number
) {
	if (0 != number) this.error("", number);
};

// инициализация обёртки----------------------------------------------------------------

var _debug = new debugInformation(
	"[ГАРО-ITG] SMTP sinks: перечисление sinks" // идентификатор сценария
);

_debug.main();

// main --------------------------------------------------------------------------------

function main() { // основная функция сценария, точка входа, так сказать
	_debug.step = "действия такое-то"
	// код для этого шага
	// в случае возникновения исключения в журнале будет зафиксирован также и "шаг",
	// на котором возникло исключение
	_debug.step = "действие второе"
	// код для этого шага
	_debug.step = "действие третье"
	// код для этого шага
};

// taks related code -------------------------------------------------------------------

// -------------------------------------------------------------------------------------

]]></script>
	</job>
</package>
Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка