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.

:/>  BAT файлы – примеры батников (Часть 2) | - IT-блог для начинающих

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.

:/>  Mcafee - что это за программа? Есть ответ!

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

:/>  Скачать игру Игры Windows 7 для Windows 8/8.1/10 для PC через торрент - GamesTracker.org

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

Adblock
detector