Выводим список процессов Windows

Выводим список процессов Windows Примеры скриптов и макросов для Word и WSH

В данной статье я хочу рассмотреть способы как получить список процессов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ыnn"; 

//Цикл для перебора коллекции
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
'**********************************************
' Включаем обработку исключительных ситуаций
OnErrorResumeNext
' Объявляем переменные
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 

' Производи перебор
ForEach PsProcess in PsProcesses
               PsList=PsList & PsProcess.Name & vbTab & PsProcess.ProcessID & vbCrLf
NEXT 

'Выводим список прoцесcов их идентификаторов
WScript.Echo PsList
Endif
'*************Конец***************************************

Скачать архив с примерами

Список процессов 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 AUTHORITYSYSTEM» /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.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий

  1. Владимир

    Довольно долго искал именно эту информацию, вот нашел, спасибо, познавательно, а главное доступно. Отличный сайт, думаю много чего еще найду для себя.

    Ответить