В данной статье я хочу рассмотреть способы как получить список процессов Windows. С одной стороны, операционная система предоставляет в распоряжение пользователя стандартный диспетчер задач, который, в принципе, и позволяет выводить список запущенных процессов Windows и приложений, но, порой приходится использовать и другие методы для получения информации о процессах операционной системы, это часто бывает, если стандартный диспетчер был заблокирован вирусом. И так, приступим. Я рассмотрю следующие методы.
- Использование средств WMI посредством написания сценариев Windows Script Host
- Встроенная утилита командной строки tasklist
Список процессов Windows с помощью средств WMI
Давайте рассмотрим два варианта вывода списка процессов системы Windows, один с помощью js-скрипта, а второй с помощью vbs-скрипта. Открываем программу Notepad++ и создаем сценарий под названием PSList.js. Для работы с Windows Management Instrumentation (WMI) нам надо будет в качестве параметра функции GetObject() указать "winMgmts:". Для обработки исключительных ситуаций будем брать стандартную конструкцию try ... catch языка jscript. Я приведу код сценария целиком, с предварительным пояснением используемых в нем лексем:
vbCritical – константа, которая задает вид значка диалогового окна
Popup – метод объекта WshShell
Enumerator – объект, используемый для перебора всех элементов коллекции, в нашем случае коллекция будет хранить данные о работающих процессах
Что бы получить информацию, мы используем класс Process схемы Win32. Выполняя SQL-запрос вида SELECT * FROM Win32_Process мы, собственно получим нужную нам коллекцию, сам запрос выполняется с помощью метода ExecQuery().
While – с помощью данного цикла мы будем просматривать все элементы,
Вот собственно, сам код сценария:
//******************************************* //PsList.JS //Вывод списка процессов Windows //******************************************* // Объявляем переменные var PsWMI, PsProcesses1, PsProcess1, PsList1, Mess1; var vbCritical=16; //Создаем экземпляр объекта WshShell var WshShell = WScript.CreateObject("WScript.Shell"); //Включаем обработку исключительных ситуаций try { //Соединяемся с WMI PsWMI=GetObject("winMgmts:"); } //Начинаем обработку возможных ошибок catch (e) { if (e!=0) { Mess ="Ошибка\nКод ошибки: " + err.Number; WshShell.Popup(Mess,0,"Запущенные прoцеccы",vbCritical); WScript.Quit(); } } //Создаем кoллeкцию всех работающих процеccoв PsProcesses1=new Enumerator(PsWMI.ExecQuery("SELECT * FROM Win32_Process")); PsList1="Зaпущенныe прoцеccы\n\n"; //Цикл для перебора коллекции while (!PsProcesses1.atEnd()) { PsProcess1=PsProcesses1.item (); PsList1+=PsProcess1.Name + " " + PsProcess1.ProcessID + "\n"; PsProcesses1.moveNext(); } //Выводим кoллeкцию процеccов и их идентификаторов WScript.Echo(PsList1); //************* Конец ******************** |
Теперь приступим к написанию vbs сценария для вывода списка Windows процессов:
'********************************************** ' PsList.VBS 'Вывод списка процессов Windows '********************************************** ' Включаем обработку исключительных ситуаций On Error Resume Next ' Объявляем переменные Dim PsWMI, PsProcesses, PsProcess, PsList, Mess ' Создаем экземпляр объекта WshShell set WshShell = WScript.CreateObject("WScript.Shell") ' Производим соединение с WMI set PsWMI=GetObject("winmgmts:") ' Проверка на ошибку If Err.Number <> 0 Then Mess ="Ошибка" &vbCrLf & "Код ошибки: " & err.Number WshShell.Popup Mess,0,"Зaпущенныe процеccы",vbCritical Else ' Производи SQL запрос для получения кoллeкции set PsProcesses=PsWMI.ExecQuery("SELECT * FROM Win32_Process") PsList="Зaпущeнные проoцeссы" & vbCrLf & vbCrLf ' Производи перебор For Each PsProcess in PsProcesses PsList=PsList & PsProcess.Name & vbTab & PsProcess.ProcessID & vbCrLf NEXT 'Выводим список прoцесcов их идентификаторов WScript.Echo PsList End if '*************Конец*************************************** |
Список процессов Windows с помощью CMD
В отличии от сервера Windows Script Host, где надо подключать WMI, командная строка имеет в своем составе стандартную утилиту tasklist для просмотра Windows списка процессов. Давайте рассмотрим основной синтаксис данной утилиты:
tasklist[.exe] [/s компьютер] [/u домен\пользователь [/p пароль]] [/fo {TABLE|LIST|CSV}] [/nh] [/fi фильтр [/fi фильтр2 [ ... ]]] [/m [модуль] | /svc | /v] |
Основной способ отображения управляется с помощью ключей, смотрим:
/s – позволяет задать имя или IP-адрес удаленного компьютера (обратную косую черту использовать не надо), по дефолту используется имя локальной, текущей машины.
/u – позволяет выполнить команду с правами учетной записи пользователя, который указывается как пользователь или домен/пользователь. По дефолту будут браться права текущего пользователя, который вошел в систему и запустил утилиту.
/p – задает пароль для учетной записи юзера, которая задана ключом /u.
/fo – тут задается формат вывода данных, допустимые значения - TABLE, LIST и CSV, по умолчанию используется значение TABLE.
/nh - Запрещает вывод заголовков столбцов. Этот параметр будет актуальным, если ключ /fo имеет значение TABLE или CSV.
/fi – Это фильтр, который дает возможность отфильтровать список выводимых процессов Windows по заданному критерию, например: TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running".
/m – Отображает все задачи, которые загрузили DLL модули, что отвечают заданному критерию. Если модуль не указан, то выводятся все модули, закруженные каждой задачей, например, /M wbem*. Данный ключ недопустимо прописывать одновременно с ключами /svc и /v.
/svc - Отображает без обрезки сведения о всех службах для каждого прoцессa. Данный аргумент является допустимым, если /fo имеет значение TABLE. Нельзя брать совместно с /m и /v
/v – Отображать подробную информацию. Несовместим с /svc и /m.
Задает отображение подробных сведений о задании в выходных данных. Нельзя брать совместно с /svc и /m.
В добавок, хотелось бы еще упомянуть утилиту PsList из набора PsUtils и программу Process Explorer для Windows, которые также позволяют выводить список процессов Windows.
Спасибо за внимание. Автор блога Владимир Баталий
Довольно долго искал именно эту информацию,вот нашел,спасибо,познавательно,а главное доступно.Отличный сайт,думаю много чего еще найду для себя.