Андрей Попов - Windows Script Host для Windows 2000/XP
- Название:Windows Script Host для Windows 2000/XP
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2004
- Город:Санкт-Петербург
- ISBN:5-94157-197-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Попов - Windows Script Host для Windows 2000/XP краткое содержание
В книге описывается сервер сценариев Windows Script Host (WSH) версии 5.6, который является одним из стандартных компонентов Windows ХР, а также может быть установлен в более ранних версиях Windows. Приводятся сценарии на языках VBScript и JScript, иллюстрирующие применение стандартных объектов WSH 5.6, включая создание из сценариев дочерних процессов и запуск сценариев на удаленных компьютерах. В качестве более сложных примеров рассматриваются сценарии, работающие с базами данных, управляющие приложениями Microsoft Office, организующие графический пользовательский интерфейс, использующие технологии ADSI (Active Directory Service Interface) и WMI (Windows Management Instrumentation) для решения задач администрирования. Освещены вопросы практической работы с XML-файлами и создания СОМ-объектов. Особое внимание уделяется вопросам безопасности при работе со сценариями, приводятся конкретные примеры настроек политик безопасности. К книге прилагается дискета с исходными текстами большинства примеров.
Windows Script Host для Windows 2000/XP - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
□ заготовки функций с префиксами get_
и put_
, которые осуществляют чтение и запись свойств объекта;
□ заготовки функций, которые соответствуют объявленным в элементах методам.
Кроме этого, создается экземпляр внутреннего объекта, содержащего те же свойства и методы, что были описаны внутри элемента (переменная description
). Имя этого внутреннего объекта совпадает с именем класса описываемого СОМ-объекта (в нашем случае это " DateArc
").
Создаваемый мастером внутренний объект нужен только в иллюстративных целях, т.к. здесь наглядно видно, какие именно свойства и методы будет предоставлять клиентам автоматизации компонент-сценарий. Если убрать из контейнера описание внутреннего объекта, это никак не скажется на функционировании объекта-сценария.
Доработка объекта-сценария DateArc.wsc (JScript)
Для получения нужного нам СОМ-объекта из сформированного с помощью Windows Script Component Wizard файла DateArc.wsc нужно выполнить несколько шагов.
Во-первых, для того, чтобы использовать внутри описания СОМ-объекта символы кириллицы, необходимо добавить в директиву аргумент encoding="windows-1251"
(без этого в сценарии не удастся даже написать по-русски комментарии):
Во-вторых, в контейнер мы вставим элемент с двумя функциями Register()
и Unregister()
, которые будут выводить на экран диалоговые окна с соответствующей информацией при регистрации компонента-сценария и его отключении соответственно:
var WshShell;
//Инициализируем константы для диалоговых окон
var vbInformation=64;
function Register() {
//Создаем объект WshShell
WshShell = new ActiveXObject("WScript.Shell");
WshShell.Popup("Компонент зарегистрирован в системе",0,
"Компонент для архивирования файлов",vbInformation);
}
function Unregister() {
//Создаем объект WshShell
WshShell = new ActiveXObject("WScript.Shell");
WshShell.Popup("Компонент удален из системы", 0,
"Компонент для архивирования файлов",vbInformation);
}
]]>
Затем нам понадобятся две дополнительные функции. Первая из них NowIs()
формирует строку формата ММДД, где ММ — текущий месяц, ДД — текущий день:
//Вспомогательная функция для символьного представления даты
function NowIs() {
var d, s="", s1="";
//Создаем объект Date (текущая дата)
d=new Date();
//Выделяем номер месяца
s+=(d.getMonth()+1);
//Если месяц представляется одним символом, добавляем слева "0"
if (s.length==1) s="0"+s;
//Выделяем в дате день
s1+=d.getDate();
//Если день представляется одним символом, добавляем слева "0"
if (s1.length==1) s1="0"+s1;
s+=s1;
//Возвращаем сформированную строку
return s;
}
Вторая функция CheckPath()
будет проверять наличие исходного каталога и каталога для хранения архивных файлов. Для этого используется метод FolderExists()
объекта FileSystemObject
. Заметим, что сам объект FileSystemObject
нужно создавать не путем вызова метода CreateObject
объекта WScript
, а с помощью конструкции new ActiveXObject()
:
FSO=new ActiveXObject("Scripting.FileSystemObject");
т.к. в отличие от обычного сценария WSH в компоненте-сценарии нет встроенного объекта WScript
. Если хотя бы один из каталогов не существует, функция CheckPath()
запишет соответствующее сообщение в свойство SErrMess
и вернет значение false
, в противном случае функция CheckPath()
возвращает значение true
.
//Проверка доступности каталогов
function CheckPath() {
var FSO;
//Создаем объект FileSystemObject
FSO=new ActiveXObject("Scripting.FileSystemObject");
//Проверяем доступность исходного каталога
if (!FSO.FolderExists(SFrom)) { //Исходный каталог не существует
//Формируем строку с информацией об ошибке
SErrMess="Не найден исходный каталог "+SFrom;
return false;
}
//Проверяем доступность каталога для архивирования
if (!FSO.FolderExists(SArch)) {
//Каталог для архивирования не существует
//Формируем строку с информацией об ошибке
SErrMess="Не найден каталог для хранения архивов "+SArch;
return false;
}
//Если оба каталога существуют, возвращаем true
return true;
}
Основной функцией, осуществляющей архивирование файлов, является FilesToArchiv()
. В самом начале этой функции с помощью вызова CheckPath()
проверяется наличие рабочих каталогов. Если хотя бы один из каталогов не существует, то выполнение FilesToArchiv()
прерывается и возвращается значение false
:
if (!CheckPath()) return false;
Затем создаются экземпляры объектов FileSystemObject
и WshShell
:
//Создаем объект FileSystemObject
FSO = new ActiveXObject("Scripting. FileSystemObject");
//Создаем объект WshShell
WshShell = new ActiveXObject("WScript.Shell");
Имя файла-архива формируется следующим образом:
//Формируем имя файла-архива
SFName=SPref+NowIs()+".arj";
Архиватор arj.exe мы будем запускать в отдельном командном окне, которое закроется после выполнения этой программы. Для этого мы сформируем командную строку SComLine
, с помощью которой запускается вторичная копия командного процессора (путь к командному процессору хранится в переменной среды %COMSPEC%
, вторичная копия вызывается с помощью ключа /с
):
SComLine="%COMSPEC% /с ";
Синтаксис запуска arj.exe для создания архивного файла имеет следующий вид:
arj.exe a Archiv Files
где Archiv
— путь к файлу-архиву, Files
— имена добавляемых в архив файлов (здесь можно использовать шаблонные символы ? и *). Поэтому мы добавим нужные компоненты к командной строке SComLine
:
SComLine+=" arj.exe a "+FSO.BuildPath(SArch, SFName) + " ";
SComLine+= FSO.BuildPath(SFrom, SMask);
Команды, записанные в SComLine
, запускаются с помощью метода Run
объекта WshShell
; код возврата сохраняется в переменной RetCode
:
RetCode = WshShell.Run(SComLine, 1, true);
Равенство нулю переменной RetCode
означает, что архивирование выполнено без ошибок — в этом случае функция FilesToArchiv()
возвращает true
. Если же при выполнении arj.exe возникла ошибка (переменная RetCode
не равна нулю), то ее код вносится в сообщение об ошибке (свойство SErrMess
):
//Анализируем код возврата для arj.exe
if (0==RetCode)
//Выполнение arj.exe завершилось без ошибок
return true;
else {
//Формируем строку с информацией об ошибке
SErrMess="Ошибка ARJ.EXE! Код "+RetCode;
return false;
}
Полностью содержимое файла DateArc.wsc приведено в листинге 10.4.
DateArc.WSC
(JScript)version="1.00"
classid="{424ac2bc-5732-4dea-be17-0211af99cd79}">
Интервал:
Закладка: