Managing Windows Programs from the Command Line- Tasklist

Basic tasklist command

If all you want
to know is what tasks are running, enter TASKLIST
into the command line.

The output can be redirected to a file if you wish.
The default format is a table with several columns of information. An example
of a partial console output is shown in the figure below. There are five
columns of information.
The following list gives the meanings of the various column headings:

Filtering tasklist output

The output can be narrowed down to specific parameters by using filters and the
switch /FI. There are a number of comparison operators
and these are given in Table II.

OperatorDescription
eqEquals
neDoes not equal
gtGreater than. Only used with numeric values
ltLess than. Only used with numeric values
geGreater than or equal to. Only used with numeric values
leLess than or equal to. Only used with numeric values

Find which dll files are used by a process


Processes can be using many different DLL files by calling on various procedures
from their libraries. It is not uncommon for a problem to arise because a DLL
is corrupted or is the wrong version. To find which DLLs are used by each process
use the command
tasklist /mThis will return a table relating
Image Name, PID, and Modules. “Modules” here indicates DLLs. The table
may have quite a few entries and the list can be limited to a specific DLL by
using its name in the command. For example, to see only the processes that use
oleaut32.dll,
enter
tasklist
/m oleaut32.dll

Find which services use a process


It can be very useful to know the relationship between a process and the services
that are running on a system (for a discussion of
services) To obtain a table relating Image Name, PID, and Services use
the command
tasklist
/svc >list.txt
Here I have shown the redirect to a file to illustrate
creating a text record. One application of this command is for diagnosing
problems with a service by monitoring the memory usage and other properties
of the processes associated with the service.

Get only pid from tasklist using cmd title

The difficult thing with tasklist is its default output format. For example, when command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running"

is executed, we get:

Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
cmd.exe 12740 Console 1 3'328 K
cmd.exe 11020 Console 1 3'304 K

Unless the column widths are fixed, which I would not rely on, extracting the PID is not that trivial, because the image name could also have SPACEs in it, so using such as delimiters would not work.
A possible way was to count the number of =-signs in the second line up to the first SPACE, so we know the number of characters to truncate to have the image name removed, but this requires some kind of loop (using goto), so the performance might be quite bad.

:/>  Realtek audio console windows 10 как настроить

However, there are other output formats available for tasklist. The command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO CSV

results in this output:

"Image Name","PID","Session Name","Session#","Mem Usage"
"cmd.exe","12740","Console","1","3'328 K"
"cmd.exe","11020","Console","1","3'304 K"

Now it is quite easy to extract the PID:

@echo off
for /F "delims=" %%R in (' tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO CSV /NH
') do ( set "FLAG1=" & set "FLAG2=" for %%C in (%%R) do ( if defined FLAG1 ( if not defined FLAG2 ( echo %%~C ) set "FLAG2=#" ) set "FLAG1=#" )
)

Another output formats is used by the following command line:

tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO LIST

resulting in this output:

Image Name: cmd.exe
PID: 12740
Session Name: Console
Session#: 1
Mem Usage: 3'328 K
Image Name: cmd.exe
PID: 11020
Session Name: Console
Session#: 1
Mem Usage: 3'304 K

With this it is even simpler to get the desired output:

@echo off
for /F "tokens=2" %%K in (' tasklist /FI "ImageName eq cmd.exe" /FI "Status eq Running" /FO LIST ^| findstr /B "PID:"
') do ( echo %%K
)

By the way, for the filter options /FI, there are the following operators available:

  • eq — equal to;
  • ne — not equal to;
  • gt — greater than;
  • lt — less than;
  • ge — greater than or equal to;
  • le — less than or equal to;

The Microsoft documentation as well as the help message (tasklist /?) do not explain their meaning, but I found the following external resources:

How to get process id by its service name with a script to variable

An alternative way to get a process PID:

$serviceName = 'svchost.exe'
$pidArgumentPlacement = 1
# Call for the verbose version of tasklist and filter it for the line with your service's name.
$serviceAsCSVString = tasklist /v /fo csv | findstr /i $serviceName
# Remove the quotes from the CSV string
$serviceCSVStringWithoutQuotes = $serviceAsCSVString -replace '["]'
# Turn the string into an array by cutting at the comma
$serviceAsArray = $serviceCSVStringWithoutQuotes -split ","
# Get the pid from the array
$servicePID = $serviceAsArray[$pidArgumentPlacement]

Or you can sum it up to:

$servicePID = $($($(tasklist /v /fo csv | findstr /i $serviceName) -replace '["]') -split ",")[$pidArgumentPlacement]

Note: This will grab the first service that matches your $serviceName, if you run a service that runs several instances of itself (e.x. slack) you’ll only get the first pid. tasklist /v /fi "IMAGENAME eq slack.exe" /fo csv will return an array with each CSV line being an array entry. You can also filter this with findstr to avoid getting the column names.

:/>  Как добавить поиск в контекстное меню файла проводников windows?

EDIT:
As WinDefend is a subservice of a program (In this case svchost.exe) you may need to swap the verbose flag for tasklist to /svc like so:

$serviceAsCSVString = tasklist /svc /fo csv | findstr /i $serviceName

alternatively search for the service’s name through a filter:

$serviceAsCSVString = tasklist /svc /fi "SERVICES eq $serviceName" /fo csv | findstr /i $serviceName

And taking into account that the filter returns a row of column names as well as the line you were looking for:

$serviceCSVStringWithoutQuotes = $serviceAsCSVString[1] -replace '["]'

Assuming you’ve changed $serviceName to WinDefend instead of svchost.exe.

Завершение процессов в windows из командной строки

Для просмотра списка запущеных процессов используется команду tasklist. Выведу стандартную информацию по команде, tasklist /?:

TASKLIST [/S <система> [/U <имя пользователя> [/P [<пароль>]]]] [/M [<модуль>] | /SVC | /V] [/FI <фильтр>] [/FO <формат>] [/NH]
Описание: Отображает список процессов, которые исполняются в текущий момент на локальном или удаленном компьютере.
Список параметров: /S <система> Подключаемый удаленный компьютер. /U [<домен>]<пользователь> Пользовательский контекст, в котором должна выполняться эта команда. /P [<пароль>] Пароль для этого пользовательского контекста. Запрашивает ввод пароля, если он не задан. /M [<модуль>] Отображение всех задач, которые используют данное имя exe/dll. Если имя модуля не указано, то отображаются все загруженные модули. /SVC Отображение служб для каждого процесса. /V Ведение подробного протоколирования. /FI <фильтр> Отображение списка задач, которые отвечают указанному в фильтре критерию. /FO <формат> Описание формата выходного файла. Допустимые значения: "TABLE", "LIST", "CSV". /NH Отключение отображения заголовка "Column Header" в выходных данных. Допустимо для форматов "TABLE" и "CSV". /? Вывод справки по использованию.
Фильтры: Имя фильтра Допустимые операторы Допустимые значения ----------- --------------- -------------------------- STATUS eq, ne RUNNING | NOT RESPONDING | UNKNOWN IMAGENAME eq, ne Имя образа PID eq, ne, gt, lt, ge, le Значение PID SESSION eq, ne, gt, lt, ge, le Номер сессии SESSIONNAME eq, ne Имя сессии CPUTIME eq, ne, gt, lt, ge, le Время CPU в формате hh:mm:ss. hh - часы, mm - минуты, ss - секунды MEMUSAGE eq, ne, gt, lt, ge, le Использование памяти в KБ USERNAME eq, ne Имя пользователя в формате [<домен><пользователь>] SERVICES eq, ne Имя службы WINDOWTITLE eq, ne Название окна MODULES eq, ne Имя DLL
Примечание: Фильтры "WINDOWTITLE" и "STATUS" не поддерживаются при опросе удаленного компьютера.
Примеры: TASKLIST TASKLIST /M TASKLIST /V /FO CSV TASKLIST /SVC /FO LIST TASKLIST /M wbem* TASKLIST /S <система> /FO LIST TASKLIST /S <система> /U <домен><пользователь> /FO CSV /NH TASKLIST /S <система> /U <пользователь> /P <пароль> /FO TABLE /NH TASKLIST /FI "USERNAME ne NT AUTHORITYSYSTEM" /FI "STATUS eq running"

Для завершения процессов используется команда taskkill. Выведу стандартную информацию по команде, taskkill /?:

TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]] { [/FI <фильтр>] [/PID <процесс> | /IM <образ>] } [/T] [/F]
Описание: Завершает процесс по его ID (PID) или имени образа.
Список параметров: /S <система> Подключаемый удаленный компьютер. /U [<домен>]<пользователь> Пользовательский контекст, в котором должна выполняться эта команда. /P <пароль> Пароль для этого пользовательского контекста. Запрашивает пароль, если он не задан. /FI <фильтр> Применение фильтра для выбора набора задач. Разрешение использовать "*". Пример, imagename eq acme* /PID <процесс> Идентификатор процесса, который требуется завершить. Используйте TaskList, чтобы получить PID. /IM <образ> Имя образа процесса, который требуется завершить. Знак подстановки "*" может быть использован для указания всех заданий или имен образов. /T Завершение указанного процесса и всех его дочерних процессов. /F Принудительное завершение процесса. /? Вывод справки по использованию.
Фильтры: Имя фильтра Допустимые операторы Допустимые значения STATUS eq, ne RUNNING | NOT RESPONDING | UNKNOWN IMAGENAME eq, ne Имя образа PID eq, ne, gt, lt, ge, le Значение PID SESSION eq, ne, gt, lt, ge, le Номер сессии CPUTIME eq, ne, gt, lt, ge, le Время CPU в формате hh:mm:ss. hh - часы, mm - минуты, ss - секунды MEMUSAGE eq, ne, gt, lt, ge, le Использование памяти в КБ USERNAME eq, ne Имя пользователя в формате [<домен>]<пользователь> MODULES eq, ne Имя DLL SERVICES eq, ne Имя службы WINDOWTITLE eq, ne Заголовок окна Примечание 1) Символ '*' для параметра /IM применим только совместно с фильтрами. 2) Завершение удаленных процессов всегда будет принудительным (/F). 3) Фильтры "WINDOWTITLE" и "STATUS" не принимаются во внимание, когда компьютер является удаленным.
Примеры: TASKKILL /IM notepad.exe TASKKILL /PID 1230 /PID 1241 /PID 1253 /T TASKKILL /F /IM cmd.exe /T TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" TASKKILL /F /FI "USERNAME eq NT AUTHORITYSYSTEM" /IM notepad.exe TASKKILL /S <система> /U <домен><пользователь> /FI "USERNAME ne NT*" /IM * TASKKILL /S <система> /U <пользователь> /P <пароль> /FI "IMAGENAME eq note*"

Для завершения процессов можно также использовать команду tskill.
Пример для поиска PID процесса по открытому порту:
netstat -o -n -a | findstr 0.0:80

:/>  Запуск оснастки службы из командной строки - О компьютерах просто

Оставьте комментарий