Андрей Попов - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
//Определяем, доступен ли файл для чтения и записи
SInfo+="\n";
if (File.Readable) SInfo+="Файл доступен для чтения\n"
else SInfo+="Файл не доступен для чтения\n";
if (File.Writeable) SInfo+="Файл доступен для записи\n"
else SInfo+="Файл не доступен для записи\n";
//Выводим сформированную строку на экран
WScript.Echo(SInfo);
/************* Конец *********************************************/
Список всех запущенных процессов
В следующих двух примерах мы будем работать с запущенными в операционной системе процессами.
Создадим сценарий ListProcesses.js, который будет выводить на экран имена всех запущенных процессов (рис. 11.29).

Рис. 11.29.Список всех запущенных в системе процессов
Первое, что необходимо сделать в сценарии — подключиться к службе Windows Management service, т.е. создать корневой элемент WMI, который содержит в себе все остальные.
Для этого в качестве параметра функции GetObject()
указывается " winMgmts:
"; в нашем примере мы соединяемся с WMI внутри блока try
, что позволяет обработать возможные исключительные ситуации:
try {
//Соединяемся с WMI
WMI=GetObject("winMgmts:");
} catch (e) {
//Обрабатываем возможные ошибки
if (е != 0) {
//Выводим сообщение об ошибке
Mess="Ошибка при соединении с WMI";
WshShell.Popup(Mess, 0, "Запущенные процессы", vbCritical);
//Выходим из сценария
WScript.Quit();
}
}
Запущенным процессам соответствует класс Process
схемы Win32
. Коллекция всех процессов создается с помощью выполнения следующего SQL-запроса:
SELECT * FROM Win32 Process
Таким образом, можно сказать, что класс Win32_Process
является аналогом таблицы базы данных; сам запрос выполняется с помощью метода ExecQuery()
:
Processes=new Enumerator(WMI.ExecQuery("SELECT * FROM Win32_Process"));
После создания коллекции мы просматриваем в цикле while
все ее элементы, каждый из которых соответствует одному процессу, и добавляем имя процесса, хранящееся в свойстве Name
, к переменной SList
:
//Инициализируем строку SList
SList="Запущенные процессы\n\n";
//Цикл по всем элементам коллекции
while (!Processes.atEnd()) {
//Извлекаем текущий элемент коллекции (запущенный процесс)
Process=Processes.item();
//Формируем строку с именами процессов
SList+=Process.Name+"\n";
//Переходим к следующему элементу коллекции
Processes.moveNext();
}
После выхода из цикла переменная SInfo
выводится на экран с помощью метода Echo()
объекта WScript
:
WScript.Echo(SInfo);
Полностью текст сценария ListProcesses.js приведен в листинге 11.21.
/********************************************************************/
/* Имя: ListProcesses.js */
/* Язык: JScript */
/* Описание: Вывод на экран списка всех запущенных на локальной */
/* рабочей станции процессов */
/********************************************************************/
var
WMI, //Экземпляр WMI
Processes, //Коллекция процессов
Process, //Экземпляр коллекции
SList; //Строка для вывода на экран
//Инициализируем константы для диалоговых окон
var vbCritical=16;
try {
//Соединяемся с WMI
WMI=GetObject("winMgmts:");
} catch (e) { //Обрабатываем возможные ошибки
if (e != 0) {
//Выводим сообщение об ошибке
Mess="Ошибка при соединении с WMI";
WshShell.Popup(Mess,0,"Запущенные процессы",vbCritical);
//Выходим из сценария
WScript.Quit();
}
}
//Создаем коллекцию всех запущенных процессов
Processes=new Enumerator(WMI.ExecQuery("SELECT * FROM Win32_Process"));
//Инициализируем строку SList
SList="Запущенные процессы\n\n";
//Цикл по всем элементам коллекции
while (!Processes.atEnd()) {
//Извлекаем текущий элемент коллекции (запущенный процесс)
Process=Processes.item();
//Формируем строку с именами процессов
SList+=Process.Name+"\n";
//Переходим к следующему элементу коллекции
Processes.moveNext();
}
//Выводим информацию на экран
WScript.Echo(SList);
/************* Конец *********************************************/
Закрытие всех экземпляров запущенного приложения
WMI позволит нам закрывать сразу все экземпляры какого-либо запущенного приложения.
В сценарии KillNotepads.js мы будем закрывать все копии Блокнота (Notepad.exe). Как и в предыдущем примере, сначала мы соединяемся с WMI внутри блока try
конструкции try…catch
:
try {
//Соединяемся с WMI
WMI=GetObject("winMgmts:");
} catch (e) {
//Обрабатываем возможные ошибки
if (e != 0) {
//Выводим сообщение об ошибке Mess="Ошибка при соединении с WMI";
WshShell.Popup(Mess, 0, "Закрытие всех Блокнотов", vbCritical);
//Выходим из сценария
WScript.Quit();
}
}
Далее нам нужно получить коллекцию всех процессов с именем "Notepad.exe". Для этого мы выполняем соответствующий SQL-запрос, текст которого предварительно заносится в переменную SQuery
:
//Формируем текст запроса
SQuery="SELECT * FROM Wln32_Process WHERE Name='Notepad.exe'"
//Создаем коллекцию-результат запроса
Processes=new Enumerator(WMI.ExecQuery(SQuery));
Теперь, имея коллекцию нужных нам процессов, мы в цикле while
перебираем все ее элементы, вызывая для каждого элемента (запущенного экземпляра Блокнота) метод Terminate()
, который завершает этот процесс:
//Цикл по всем элементам коллекции
while (!Processes.atEnd()) {
//Извлекаем текущий элемент коллекции (процесс с именем Notepad.exe)
Process=Processes.item();
try {
//Завершаем процесс
Process.Terminate();
} catch (e) {
//Обрабатываем возможные ошибки if (e != 0) {
//Выводим сообщение об ошибке
Mess="Ошибка при закрытии текущего экземпляра";
WshShell.Popup(Mess, 0, "Закрытие всех Блокнотов", vbCritical);
}
}
//Переходим к следующему элементу коллекции
Processes.moveNext();
Полностью текст сценария KillNotepads.js приведен в листинге 11.22.
/********************************************************************/
/* Имя: KillNotepads.js */
/* Язык: JScript */
/* Описание: Закрытие всех запущенных экземпляров Блокнота */
/********************************************************************/
var
WMI, //Экземпляр WMI
SQuery, //Текст запроса
Processes, //Коллекция процессов
Process, //Экземпляр коллекции
Интервал:
Закладка: