===== Управление процессами из командной строки 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/|Внешняя ссылка]]