If you’re looking for processes such as SearchIndexer — this should be pretty simple to do with PowerShell
Get-Process
will show you a list of running processes. In this case, I have piped it to Select -first 1
because you’re interested in the column headers, not a list of the 100+ processes on my PC:
Next up — now you know how to get processes, you need to narrow this down to a specific process. Below, I’ve shown 4 methods to do this:
Get-Process Search*
will return all processes starting with search
Get-Process SearchIndexer
will return just that one process if it exists
Get-Process | Where {$_.Name -eq "SearchIndexer"}
will find all processes and then only select the one called SearchIndexer
Get-Process | Where {$_.ProcessName -Like "SearchIn*"}
will get all processes and narrow down to ones that start with «SearchIn».
As a side note — you can use wild cards at either end, so `rchInde» will also return the process you want.
Now — to kill the process — pipe it to Stop-Process:
..But it didnt work!
To Stop it — as with some processes — you need to run PowerShell as an Administrator:
..but you still get a prompt!
…ignore the error at the bottom, we’ve just proven that the process doesn’t exist any more
Add the -Force
switch and the prompt goes away!
But we dont like errors when we try to do it over and over:
…so we need to handle it slightly differently. Instead of explicitly stopping that one process, grab all of them, filter it down to the ones we want (if any) and then kill them (if they exist):
last up — add it as a scheduled task action (if you need to) as windows likes to restart certain services/processes and you’re all set.
Способов управлять процессами в Windows предостаточно, и командная строка занимает в них далеко не первое место. Однако иногда бывают ситуации, когда все остальные инструменты кроме командной строки недоступны, например некоторые вредоносные программы могут блокировать запуск Task Manager и подобных ему программ. Да и просто для общего развития полезно знать способы управления компьютером из командной строки.
Для управления процессами в командной строке есть две утилиты — tasklist и taskkill. Первая показывает список процессов на локальном или удаленном компьютере, вторая позволяет их завершить. Попробуем …
Если просто набрать команду tasklist в командной строке, то она выдаст список процессов на локальном компьютере.
По умолчанию информация выводится в виде таблицы, однако ключ /fo позволяет задать вывод в виде списка или в формате CSV, а ключ /v показывает более подробную информацию о процессах, например команда tasklist /v /fo list выведет подробное описание всех процессов в виде списка.
Список получится довольно большой, поэтому попробуем уточнить запрос. Для этого используем ключ /fi , который позволяет использовать фильтры для вывода данных, например команда tasklist /fi ″username eq user″ /fi ″memusage le 40000″ выводит список процессов пользователя user, которые потребляют не больше 40Мб памяти.
Найдя процессы, которые необходимо завершить, воспользуемся командой taskkill. Завершать процессы можно по имени, идентификатору процесса (PID) или задав условия с помощью фильтров. Для примера запустим несколько экземпляров блокнота (notepad.exe) и попробуем завершить его разными способами.
Ключ /f завершает процесс принудительно, а /t завершает все дочерние процессы.
Полную справку по командам tasklist и taskkill можно получить, введя их с ключом /?
Теперь пустим в ход тяжелую артиллерию — PowerShell. Его можно запустить не выходя из командной строки. Для получения списка процессов используем командлет Get-Process.
Чтобы не выводить весь список процессов можем воспользоваться командлетом Where-Object, который задает фильтр для выводимой информации. Для примера выведем список процессов, которые загружают процессор и отсортируем их по возрастанию нагрузки с помощью команды:
Get-Process | where {$_.cpu -gt 0} | sort cpu
С помощью PowerShell мы можем получить любую информацию о любом процессе. В качестве примера возьмем процесс cmd и выведем список его свойств командой:
Get-Process -Name cmd | Get-Member -Membertype property
Выбираем те свойства, что нам интересны ( в примере имя и ID процесса, путь к файлу, используемые модули и время запуска) и выводим их в виде списка командой:
Get-Process -Name cmd | Format-List name, id, path, modules, starttime
Таким образом мы можем посмотреть когда и кем был запущен процесс, сколько он потребляет ресурсов, где находится исполняемый файл и еще много различной информации.
Для завершения процесса в PowerShell есть командлет Stop-Process. Он завершает указанный процесс по его имени или идентификатору. Однако мы поступим по другому и передадим результат выполнения командлета Get-Process по конвейеру:
Get-Process | where {$_.name -match ″notepad″} | Stop-Process
Get-Process не может показать процессы на удаленном компьютере, для этого воспользуемся командлетом Get-WmiObject , например посмотрим процессы на удаленном компьютере PC командой:
Get-WmiObject win32_process -computername PC | ft name, processid, description
Для боле полного ознакомления с PowerShell можно воспользоваться встроенной справкой, для вызова справки нужно набрать Get-Help ″имя командлета″
Ну и для полноты обзора рассмотрим еще одно средство для управления процессами из командной строки. Это утилиты Pslist и Pskill входящие в состав пакета PSTools от компании Sysinternals.
Эти утилиты не требуют специальной установки, достаточно просто скопировать их на диск. Для запуска нужно зайти в папку с утилитами и ввести в командной строке необходимую команду.
Pslist может выводить информацию о процессах по имени или ID, например командой pslist notepad -x выведем подробную информацию о нашем «многострадальном» блокноте.
Особенностью утилиты Pslist является режим task-manager. В этом режиме информация автоматически обновляется, причем можно задать время работы и интервал обновления. Запускается режим ключом -s , например командой tasklist -s -r 10 запускаем режим программу в режиме task-manager с обновлением раз в 10 сек.
Завершение процесса программой pskill предельно просто, вводим команду и имя (или ID) процесса и все.
Справку по утилитам Pslist и Pskill можно посмотреть, введя команду с ключом /?
И еще, все манипуляции с процессами необходимо выполнять с правами администратора, для этого командную строку требуется запускать с повышением привилегий.
If you’re looking for processes such as SearchIndexer — this should be pretty simple to do with PowerShell
Get-Process
will show you a list of running processes. In this case, I have piped it to Select -first 1
because you’re interested in the column headers, not a list of the 100+ processes on my PC:
Next up — now you know how to get processes, you need to narrow this down to a specific process. Below, I’ve shown 4 methods to do this:
Get-Process Search*
will return all processes starting with search
Get-Process SearchIndexer
will return just that one process if it exists
Get-Process | Where {$_.Name -eq "SearchIndexer"}
will find all processes and then only select the one called SearchIndexer
Get-Process | Where {$_.ProcessName -Like "SearchIn*"}
will get all processes and narrow down to ones that start with «SearchIn».
As a side note — you can use wild cards at either end, so `rchInde» will also return the process you want.
Now — to kill the process — pipe it to Stop-Process:
..But it didnt work!
To Stop it — as with some processes — you need to run PowerShell as an Administrator:
..but you still get a prompt!
…ignore the error at the bottom, we’ve just proven that the process doesn’t exist any more
Add the -Force
switch and the prompt goes away!
But we dont like errors when we try to do it over and over:
…so we need to handle it slightly differently. Instead of explicitly stopping that one process, grab all of them, filter it down to the ones we want (if any) and then kill them (if they exist):
last up — add it as a scheduled task action (if you need to) as windows likes to restart certain services/processes and you’re all set.
I get two results when I run this:
tasklist /FI «imagename eq PROCESS.exe»
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
PROCESS.exe 2760 Console 1 8,156 K
PROCESS.exe 20160 Console 1 9,060 K
But I only want to kill ONE of them…
If I open up the Task Manager, I can see that each of my processes have different descriptions.
So all I need to do, is somehow filter by process description.
Can anyone help, please?
Thank you!
asked May 25, 2016 at 10:50
3
Use the following to distinguish the processes according to their own process ID and their parent process ID:
wmic process get processid,parentprocessid,executablepath | find "PROCESS"
This way, you can find the process ID to kill.
wmic
grants access to additional process properties.
Use wmic process get /?
to find out what is available.
Another potentially helpful tool is PsList of Microsoft/Sysinternals.
answered May 25, 2016 at 12:17
Axel KemperAxel Kemper
10.6k2 gold badges31 silver badges54 bronze badges
2
If you want to filter your process list by the window title, just use
tasklist /FI "windowtitle eq Title"
As addition to @Axel’s answer with WMI — the same for description
:
WMIC Process WHERE "Description='Only One'" GET ProcessID
And in VBS:
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Process WHERE Description = 'My Desc'",,48)
For Each objItem in colItems
'Do Stuff
Next
Another possible value for description is the assembly’s description which is retrievable with PowerShell. Use Get-Process
to obtain the assembly path and retrieve its description with [System.Diagnostics.FileVersionInfo]::GetVersionInfo($File).FileDescription
.
answered May 25, 2016 at 12:09
ClijstersClijsters
3,9912 gold badges28 silver badges38 bronze badges
1
Поговорим о том, как найти и завершить (убить) приложение (процесс), используя встроенные утилиты командной строки tasklist и taskkill в ОС Windows.
Процессом в windows называют экземпляр выполняемой программы.
Просмотр запущенных процессов.
Tasklist – консольная утилита для просмотра всех процессов, выводит имя образа, PID, имя сессии, номер сеанса и объем занимаемой памяти для каждого процесса. Запустить ее можно из командной строки windows.
Для запуска командной строки windows, переходим в пункт меню: Пуск —> Выполнить —> В строку вводим команду cmd.exe.
C:\Windows\System32>tasklist
Вывод команды tasklist.
Завершение работы процесса.
Taskkill – утилита для завершения работы процесса. Существует несколько вариантов для убийства процесса.
1. По номеру PID.
C:\Windows\System32>taskkill /PID 6056
Вывод команды taskkill /PID 6056.
2. По имени.
Windows\System32>taskkill /IM calc.exe
Вывод команды taskkill /IM calc.exe.
Дополнительную информацию по применению этих команд можно получить, используя справку.
C:\>tasklist /? C:\>taskkill /?
Вот и все. Рассмотрение утилит tasklist и taskkill завершено. Может кому и пригодиться.