Здравствуйте, Друзья.
Всё новое — хорошо забытое старое!
Речь пойдёт НЕ О HTML/JavaScript, а только о JavaScript!
Искал эту тему на Хабре, но не нашёл…
Работаю системным администратором в своей компании (домен windows) и поэтому часто приходится писать различные скрипты. За время работы была сделана библиотека функций (от .prototype, до WMI), которые вечно приходилось таскать за собою из файла в файл, что очень напрягает и утяжеляет код. Очень неприятно, когда начинаются модификации библиотечных функций (так же написанных на JavaScript). Вот тогда приходится искать где эта функция уже использовалась? Процесс поиска — утомительный, да ещё и отладкой нескольких файлов попахивает. Вот тогда и всплыло в моей памяти, что несколько лет назад читал где-то на форуме (уже за давностью лет и забылось на каком), что есть возможность делать такие «include».
Называется такая возможность .WSF. Технология древняя, как меловой период. Когда пишешь один .js, то этой технологии кажется много и не хочется свой код усугублять невнятным xml, но как только вспоминаешь, что вот функцию бы из «того» скрипта, добавить в «этот», так без этой технологии не обойтись.
Вот хорошее описание: http://www.osp.ru/win2000/2007/08/4684940/
От себя хочу добавить, что сразу поубавился объём кода, когда в начале файлов .wsf появилась запись:
Кроме того можно делать «include» не только JavaScript, но и VBScript.
Но при этом возникла другая проблема. Хочется подсветки синтаксиса js/vbs, а ведь ни один редактор не умеет разбирать формат .wsf, поскольку там перемешаны xml, javascript/vbscript. Нда, иногда приходится удивляться, как работать с хорошей технологией приходится через блокнот. Уже смирившись с таким способом редактирования wsf-файлов вдруг обнаружил, что не я один был озабочен такой проблемой!!! И оказалось, что для этого нашлись умные ребята и написали отличный редактор:
Script Editor (trial, но...)
У него есть хорошие возможности: подобие intellisense (подсвечивает путь к файлу, из которого через «include» взялась функция, например, по ctrl-Space), возможность запускать программу прямо из окна редактора (кто использует scriptomatic — оценит: взял код из скриптоматика, вставил его в этот редактор и вперёд — на доработку). Встроенный хелп на объекты WScript, WshNetwork и пр. нужные объекты.
Минусом в этом редакторе я обнаружил только отсутствие интеллектуальных отступов и практически полное отсутствие настроек текстового редактора. Зато несомненным плюсом было то, что вместо табуляции пишутся четыре пробела (это на мой вкус, уж очень мне четыре пробела по душе!).
Вот пример:
Функции, которые я запишу в файл frameWork.js, а файл размещу в каталоге "\\server03\install\AdminScripts\frameWork.js".
Пришла пора воспользоваться библиотекой.
Скрипт записывает в файл имя компьютера на котором запустили этот скрипт (запишем файл в путь "\\server03\install\AdminScripts\powerOnToFile.wsf"):
Через Active Directory в GPO->Конфигурация компьютера->Конфигурация Windows->Сценарии Запуск/Завершение->Автозагрузка->«cscript.exe»,"\\server03\Install\AdminScripts\powerOnToFile.wsf"
Теперь я знаю, что компьютер сегодня был включён.
Второй скрипт определяет логин пользователя на компьютере, на котором запущен этот скрипт:
(запишем файл в путь "\\server03\install\AdminScripts\logonToFile.wsf"):
Через Active Directory в GPO->Конфигурация пользователя->Конфигурация Windows->Сценарии Запуск/Завершение->Автозагрузка->«cscript.exe»,"\\server03\Install\AdminScripts\logonToFile.wsf"
Теперь, когда пользователи включают с утра компьютеры и логинятся на них, то в каталог
\\server03\\Файлы\\log
записываются файлы с нужной мне информацией, что компьютер включался и что пользователь заходил на определённый компьютер с определённым логином. Как видим, в обоих файлах использовались функции echo() и appendStrToFile(), getStrToday(), которые были взяты из библиотечного файла frameWork.js
Теперь у меня, как у администратора есть информация, какие компьютеры сегодня включались и на какие входили пользователи.
Надеюсь, что такая простая технология с этим редактором может принести кому-то огромную пользу.
Всё новое — хорошо забытое старое!
Речь пойдёт НЕ О HTML/JavaScript, а только о JavaScript!
Искал эту тему на Хабре, но не нашёл…
Работаю системным администратором в своей компании (домен windows) и поэтому часто приходится писать различные скрипты. За время работы была сделана библиотека функций (от .prototype, до WMI), которые вечно приходилось таскать за собою из файла в файл, что очень напрягает и утяжеляет код. Очень неприятно, когда начинаются модификации библиотечных функций (так же написанных на JavaScript). Вот тогда приходится искать где эта функция уже использовалась? Процесс поиска — утомительный, да ещё и отладкой нескольких файлов попахивает. Вот тогда и всплыло в моей памяти, что несколько лет назад читал где-то на форуме (уже за давностью лет и забылось на каком), что есть возможность делать такие «include».
Называется такая возможность .WSF. Технология древняя, как меловой период. Когда пишешь один .js, то этой технологии кажется много и не хочется свой код усугублять невнятным xml, но как только вспоминаешь, что вот функцию бы из «того» скрипта, добавить в «этот», так без этой технологии не обойтись.
Вот хорошее описание: http://www.osp.ru/win2000/2007/08/4684940/
От себя хочу добавить, что сразу поубавился объём кода, когда в начале файлов .wsf появилась запись:
<?xml version="1.0" encoding="UTF-8"?> <package> <job id="id01"> <script language="JScript" src="\\server03\install\AdminScripts\frameWork.js"/> <script language="JScript"> <![CDATA[// Сюда пишем свои функции... ]]> </script> </job> </package>
Кроме того можно делать «include» не только JavaScript, но и VBScript.
Но при этом возникла другая проблема. Хочется подсветки синтаксиса js/vbs, а ведь ни один редактор не умеет разбирать формат .wsf, поскольку там перемешаны xml, javascript/vbscript. Нда, иногда приходится удивляться, как работать с хорошей технологией приходится через блокнот. Уже смирившись с таким способом редактирования wsf-файлов вдруг обнаружил, что не я один был озабочен такой проблемой!!! И оказалось, что для этого нашлись умные ребята и написали отличный редактор:
Script Editor (trial, но...)
У него есть хорошие возможности: подобие intellisense (подсвечивает путь к файлу, из которого через «include» взялась функция, например, по ctrl-Space), возможность запускать программу прямо из окна редактора (кто использует scriptomatic — оценит: взял код из скриптоматика, вставил его в этот редактор и вперёд — на доработку). Встроенный хелп на объекты WScript, WshNetwork и пр. нужные объекты.
Минусом в этом редакторе я обнаружил только отсутствие интеллектуальных отступов и практически полное отсутствие настроек текстового редактора. Зато несомненным плюсом было то, что вместо табуляции пишутся четыре пробела (это на мой вкус, уж очень мне четыре пробела по душе!).
Вот пример:
Функции, которые я запишу в файл frameWork.js, а файл размещу в каталоге "\\server03\install\AdminScripts\frameWork.js".
// Вывод сообщения на экран (чтобы не писать часто WScript.Echo() ): // Чтобы подавить вывод эха нужно просто установить эту переменную в false. // Очень удобно по окончании процесса отладки, чтобы ничего не выводить. var boolShowEchoFunction=true; function echo(str) { if(boolShowEchoFunction==false) { return; } if(typeof(window)!='undefined') { window.alert(str); } if(typeof(WScript)!='undefined') { WScript.Echo(str); } } // Открыть файл и сохранить в нём строку (пишу много логов в текстовые файлы): function appendStrToFile(fileName, strData) { try { var fso = WScript.CreateObject("Scripting.FileSystemObject"); // Разложить путь на составляющие и проверить, есть ли каталог, в который нужно писать файл: var arrPath = new Array(); fileName = fileName.replace(/[\/]+/gi, "\\").replace(/^\\\\/, "//").replace(/\\/gi,"\n").replace(/^\/\//gi, "\\\\"); arrPath = fileName.split("\n"); // Пройтись по пути и проверить наличие каждого каталога: var fileName = arrPath[0]; var n=0; for(n=1;n<=arrPath.length-2;n++) { fileName+="\\"+arrPath[n]; if( !fso.FolderExists(fileName) ) { fso.CreateFolder(fileName); } } fileName += "\\"+arrPath.last(); if(!fso.FileExists(fileName)) { var file = fso.CreateTextFile(fileName); file.Close(); } var f = fso.GetFile(fileName); var file = f.OpenAsTextStream(ForAppending, TristateTrue); file.Write(strData); file.Close(); } catch(e) { echo("Ошибка записи:\nappendStrToFile("+fileName+", "+strData+"):\n"+e.description+", \n" ); } return; } // Получить строку с сегодняшней датой (выровненной нулями): function getStrToday() { var now = new Date(); var strNowDate = now.getYear()+"-"+( (now.getMonth()+1) <= 9 ? "0" : "")+(now.getMonth()+1)+"-"+(now.getDate() <= 9 ? "0" : "")+now.getDate(); return strNowDate; } function getStrTime() { var now = new Date(); var strNowTime = (now.getHours() <= 9 ? "0" : "")+now.getHours()+":"+(now.getMinutes() <= 9 ? "0" : "")+now.getMinutes()+":"+(now.getSeconds() <= 9 ? "0" : "")+now.getSeconds(); return strNowTime; } // Вернуть время с точностью до миллисекунды. function getStrTimeM() { var now = new Date(); var strNowTime = (now.getHours() <= 9 ? "0" : "")+now.getHours()+":"+(now.getMinutes() <= 9 ? "0" : "")+now.getMinutes()+":"+(now.getSeconds() <= 9 ? "0" : "")+now.getSeconds()+":"+(now.getMilliseconds() <= 99 ? now.getMilliseconds() <= 9 ? "00" : "0" : "")+now.getMilliseconds(); return strNowTime; }
Пришла пора воспользоваться библиотекой.
Скрипт записывает в файл имя компьютера на котором запустили этот скрипт (запишем файл в путь "\\server03\install\AdminScripts\powerOnToFile.wsf"):
<?xml version="1.0" encoding="UTF-8"?> <package> <job id="id01"> <script language="JScript" src="\\server03\install\AdminScripts\frameWork.js"/> <script language="JScript"> <![CDATA[// Регистрировать событие входа function logonToFile() { WshShell = WScript.CreateObject("WScript.Shell"); WshNetwork = WScript.CreateObject("WScript.Network"); var maxLen = 0; var now = new Date(); var fileName = "\\\\server03\\Файлы\\log\\powerOn\\"+getStrToday()+"\\powerOn-["+WshNetwork.ComputerName+"]["+getStrToday()+"]"; // Суффикс файла, в который будет сливаться инфа. var strNowDate = getStrToday(); var strNowTime = getStrTime(); appendStrToFile( fileName+".txt", "\r\n["+strNowDate+"]["+strNowTime+"]["+WshNetwork.ComputerName+"]"); } logonToFile(); ]]> </script> </job> </package>
Через Active Directory в GPO->Конфигурация компьютера->Конфигурация Windows->Сценарии Запуск/Завершение->Автозагрузка->«cscript.exe»,"\\server03\Install\AdminScripts\powerOnToFile.wsf"
Теперь я знаю, что компьютер сегодня был включён.
Второй скрипт определяет логин пользователя на компьютере, на котором запущен этот скрипт:
(запишем файл в путь "\\server03\install\AdminScripts\logonToFile.wsf"):
<?xml version="1.0" encoding="UTF-8"?> <package> <job id="id01"> <script language="JScript" src="\\server03\install\AdminScripts\frameWork.js"/> <script language="JScript"> <![CDATA[// Регистрировать событие входа function logonToFile() { WshShell = WScript.CreateObject("WScript.Shell"); WshNetwork = WScript.CreateObject("WScript.Network"); var maxLen = 0; var now = new Date(); var fileName = "\\\\server03\\Файлы\\log\\powerOn\\"+getStrToday()+"\\powerOn-["+WshNetwork.ComputerName+"]["+getStrToday()+"]"; // Суффикс файла, в который будет сливаться инфа. var strNowDate = getStrToday(); var strNowTime = getStrTime(); appendStrToFile( fileName+".txt", "\r\n["+strNowDate+"]["+strNowTime+"]["+WshNetwork.ComputerName+"]"); } logonToFile(); ]]> </script> </job> </package>
Через Active Directory в GPO->Конфигурация пользователя->Конфигурация Windows->Сценарии Запуск/Завершение->Автозагрузка->«cscript.exe»,"\\server03\Install\AdminScripts\logonToFile.wsf"
Теперь, когда пользователи включают с утра компьютеры и логинятся на них, то в каталог
\\server03\\Файлы\\log
записываются файлы с нужной мне информацией, что компьютер включался и что пользователь заходил на определённый компьютер с определённым логином. Как видим, в обоих файлах использовались функции echo() и appendStrToFile(), getStrToday(), которые были взяты из библиотечного файла frameWork.js
Теперь у меня, как у администратора есть информация, какие компьютеры сегодня включались и на какие входили пользователи.
Надеюсь, что такая простая технология с этим редактором может принести кому-то огромную пользу.