===== Управление процессами из командной строки Windows =====
Способов управлять процессами в Windows предостаточно, и командная строка занимает в них далеко не первое место. Однако иногда бывают ситуации, когда все остальные инструменты кроме командной строки недоступны, например некоторые вредоносные программы могут блокировать запуск Task Manager и подобных ему программ. Да и просто для общего развития полезно знать способы управления компьютером из командной строки.
Для управления процессами в командной строке есть две утилиты — **tasklist** и **taskkill**. Первая показывает список процессов на локальном или удаленном компьютере, вторая позволяет их завершить.
Если просто набрать команду **tasklist** в командной строке, то она выдаст список процессов на локальном компьютере.
{{ :work:process-list-cmd:cmd1.gif?nolink |}}
По умолчанию информация выводится в виде таблицы, однако ключ ''/fo'' позволяет задать вывод в виде списка или в формате CSV, а ключ ''/v'' показывает более подробную информацию о процессах, например команда ''tasklist /v /fo list'' выведет подробное описание всех процессов в виде списка.
{{ :work:process-list-cmd:cmd2.gif?nolink |}}
Список получится довольно большой, поэтому попробуем уточнить запрос. Для этого используем ключ ''/fi'' , который позволяет использовать фильтры для вывода данных, например команда ''tasklist /fi ″username eq user″ /fi ″memusage le 40000″'' выводит список процессов пользователя **user**, которые потребляют не больше 40Мб памяти.
{{ :work:process-list-cmd:cmd3.gif?nolink |}}
Найдя процессы, которые необходимо завершить, воспользуемся командой **taskkill**. Завершать процессы можно по имени, идентификатору процесса (PID) или задав условия с помощью фильтров. Для примера запустим несколько экземпляров блокнота (notepad.exe) и попробуем завершить его разными способами.
{{ :work:process-list-cmd:cmd5.gif?nolink |}}
Ключ ''/f'' завершает процесс принудительно, а ''/t'' завершает все дочерние процессы.
Полную справку по командам **tasklist** и **taskkill** можно получить, введя их с ключом ''/?''
Теперь пустим в ход тяжелую артиллерию — **PowerShell**. Его можно запустить не выходя из командной строки. Для получения списка процессов используем командлет **Get-Process**.
{{ :work:process-list-cmd:cmd6.gif?nolink |}}
Чтобы не выводить весь список процессов можем воспользоваться командлетом **Where-Object**, который задает фильтр для выводимой информации. Для примера выведем список процессов, которые загружают процессор и отсортируем их по возрастанию нагрузки с помощью команды:
Get-Process | where {$_.cpu -gt 0} | sort cpu
{{ :work:process-list-cmd:cmd9.gif?nolink |}}
С помощью PowerShell мы можем получить любую информацию о любом процессе. В качестве примера возьмем процесс cmd и выведем список его свойств командой:
Get-Process -Name cmd | Get-Member -Membertype property
{{ :work:process-list-cmd:cmd7.gif?nolink |}}
Выбираем те свойства, что нам интересны ( в примере имя и ID процесса, путь к файлу, используемые модули и время запуска) и выводим их в виде списка командой:
Get-Process -Name cmd | Format-List name, id, path, modules, starttime
{{ :work:process-list-cmd:cmd8.gif?nolink |}}
Таким образом мы можем посмотреть когда и кем был запущен процесс, сколько он потребляет ресурсов, где находится исполняемый файл и еще много различной информации.
Для завершения процесса в PowerShell есть командлет **Stop-Process**. Он завершает указанный процесс по его имени или идентификатору. Однако мы поступим по другому и передадим результат выполнения командлета **Get-Process** по конвейеру:
Get-Process | where {$_.name -match ″notepad″} | Stop-Process
{{ :work:process-list-cmd:cmd10.gif?nolink |}}
**Get-Process** не может показать процессы на удаленном компьютере, для этого воспользуемся командлетом **Get-WmiObject** , например посмотрим процессы на удаленном компьютере PC командой:
Get-WmiObject win32_process -computername PC | ft name, processid, description
{{ :work:process-list-cmd:cmd11.gif?nolink |}}
Для боле полного ознакомления с PowerShell можно воспользоваться встроенной справкой, для вызова справки нужно набрать **Get-Help ″имя командлета″**
Ну и для полноты обзора рассмотрим еще одно средство для управления процессами из командной строки. Это утилиты **Pslist** и **Pskill** входящие в состав пакета **PSTools** от компании Sysinternals.
Эти утилиты не требуют специальной установки, достаточно просто скопировать их на диск. Для запуска нужно зайти в папку с утилитами и ввести в командной строке необходимую команду.
{{ :work:process-list-cmd:cmd12.gif?nolink |}}
**Pslist** может выводить информацию о процессах по имени или ID, например командой **pslist notepad -x** выведем подробную информацию о нашем «многострадальном» блокноте.
{{ :work:process-list-cmd:cmd13.gif?nolink |}}
Особенностью утилиты **Pslist** является режим task-manager. В этом режиме информация автоматически обновляется, причем можно задать время работы и интервал обновления. Запускается режим ключом ''-s'' , например командой **tasklist -s -r 10** запускаем режим программу в режиме task-manager с обновлением раз в 10 сек.
{{ :work:process-list-cmd:cmd14.gif?nolink |}}
Завершение процесса программой **pskill** предельно просто, вводим команду и имя (или ID) процесса и все.
{{ :work:process-list-cmd:cmd15.gif?nolink |}}
Справку по утилитам Pslist и Pskill можно посмотреть, введя команду с ключом /?
И еще, все манипуляции с процессами необходимо выполнять с правами администратора, для этого командную строку требуется запускать с повышением привилегий.
Источник [[https://windowsnotes.ru/cmd/upravlenie-processami-iz-komandnoj-stroki/|Внешняя ссылка]]