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='Запущенные процессы
';
//Цикл по всем элементам коллекции
while (!Processes.atEnd()) {
//Извлекаем текущий элемент коллекции (запущенный процесс)
Process=Processes.item();
//Формируем строку с именами процессов
SList+=Process.Name+'
';
//Переходим к следующему элементу коллекции
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='Запущенные процессы
';
//Цикл по всем элементам коллекции
while (!Processes.atEnd()) {
//Извлекаем текущий элемент коллекции (запущенный процесс)
Process=Processes.item();
//Формируем строку с именами процессов
SList+=Process.Name+'
';
//Переходим к следующему элементу коллекции
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'. Для этого мы