Обёртка для сценария: регистрация событий скрипта в журнале событий
Зачастую мы разрабатываем сценарии для того, чтобы выполнять их по расписанию, при применении политик и так далее. Другими словами, за исполнение сценария мы не наблюдаем, а контролировать возможные ошибки при исполнении сценария всё-таки необходимо. Предлагаю Вашему вниманию унифицированную в некоторой степени обёртку сценария 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>
RSS комментарии
Обратная ссылка