Удаленно остановить процесс windows

Управление процессами с помощью PowerShell

PowerShell предоставляет широкие возможности управления процессами на локальном или удаленном компьютере. С помощью PowerShell можно получить список запущенных процессов, приостановить зависший процесс, найти процесс по заголовку окна, запустить новый процесс в скрытом или интерактивном режиме.

Список доступных командлетов управления процессами в Windows 10 можно вывести так:

Get-Command –Noun Process

  • Get-Process – получить список запущенных процессов;
  • Start-Process – запустить процесс/программу;
  • Stop-Process – принудительно остановить процесс;
  • Debug-Process – используется для отладки процессов;
  • Wait-Process – используется для ожидания окончания процесса.

Get-Process – получение списка запущенных процессов

Командлет Get-Process позволяет вывести список запущенных процессов на локальном компьютере.

По-умолчанию выводятся следующие свойства запущенных процессов:

  • Handles – количество дескрипторов ввода — вывода, которые отрыл данный процесс;
  • NPM(K) — Non-paged memory (невыгружаемый пул). Размер данных процесса (в Кб.), которые никогда не попадают в файл подкачки на диск;
  • PM(K) – размер памяти процесса, которая может быть выгружена на диск;
  • WS(K) – размер физической памяти в Кб, используемой процессом (working set).
  • CPU(s) – процессорное время, использованное процессом (учитывается время на всех CPU);
  • ID — идентификатор процесса;
  • SI (Session ID) – идентификатор сеанса процесса (0 — запущен для всех сессий, 1 – для первого залогиненого пользователя, 2 — для второго и т.д.);
  • ProcessName – имя процесса.

Чтобы получить все свойства нескольких процессов:

Get-Process winword, notep* | Format-List *

Можно вывести только определенный свойства процессов. Например, имя (ProcessName) время запуска (StartTime), заголовок окна процесса (MainWindowTitle), имя исполняемого файла (Path) и наименование разработчика (Company):

Get-Process winword, notep* | Select-Object ProcessName, StartTime, MainWindowTitle, Path, Company|ft

Вывести список запущенных процессов пользователя с графическими окнами (в список не попадут фоновые и системные процессы):

Get-Process | Where-Object <$_.mainWindowTitle>| Format-Table Id, Name, mainWindowtitle

С помощью параметра IncludeUserName можно вывести имя пользователя (владельца), который запустил процесс:

Get-Process -Name winword -IncludeUserName

С помощью Where-Object можно выбрать процессы в соответствии с заданными критериями. Например, выведем все процессы, которые используются более 200 Мб оперативной памяти, отсортируем процессы в порядке убывания используемого объема RAM, размер памяти из Кб преобразуем в Мб:

Как мы уже говорили ранее командлет Get-Process в параметре CPU содержит время использования процессора конкретным процессом в секундах. Чтобы отобразить процент использования CPU процессами (по аналогии с Task Manager), используйте такую функцию:

function Get-CPUPercent
<
$CPUPercent = @<
Name = ‘CPUPercent’
Expression = <
$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds
[Math]::Round( ($_.CPU * 100 / $TotalSec), 2)
>
>
Get-Process | Select-Object -Property Name, $CPUPercent, Description | Sort-Object -Property CPUPercent -Descending | Select-Object -First 20
>

Чтобы найти зависшие процессы (которые не отвечают), выполните команду:

Start-Process, Stop-Process: запуск и остановка процессов из PowerShell

Чтобы запустить новый процесс с помощью PowerShell используется команда:

Start-Process -FilePath notepad

Если каталог с исполняемым файлом отсутствует в переменной окружения $env:path, нужно указать полный путь к файлу:

Start-Process -FilePath ‘C:\distr\app.exe’

Можно запустить программу и передать ей аргументы:

Start-Process -FilePath ping -ArgumentList «-n 10 192.168.1.11»

С помощью параметра WindowStyle вы можете задать режим запуска окна процесса (normal, minimized, maximized, hidden). Например, чтобы запустить программу в максимально развернуом окне и дождаться завершения процесса, выполните команду:

Start-Process -FilePath tracert -ArgumentList «192.168.1.11» –wait -windowstyle Maximized

С помощью командлета Stop-Process можно завершить любой процесс. Например, чтобы закрыть все запущенные процессы notepad:

Stop-Process -Name notepad

По-умолчанию не запрашивается подтверждение завершения процесса. Закрываются все процессы, которые соответствуют указанным критериям. Чтобы запросить подтверждение завершения для каждого процесса, добавьте –Confirm.

Stop-Process -Name notepad.exe -Confirm

(Get-Process -Name notepad).Kill()

Из PowerShell можно принудительно завершить все приложения, которые не отвечают диспетчеру процессов Windows:

Get-Process | where-object <$_.Responding -eq $false>| Stop-Process

PowerShell: управление процессами на удаленном компьютере

С помощью аргумента ComputerName командлет Get-Process позволяет управлять процессами на удаленных компьютерах (должен быть включен и настроен WinRM).

Get-Process -ComputerName dc01, dc02| Format-Table -Property ProcessName, ID, MachineName

Читайте также:  Куда ввести код активации windows

Если вы хотите завершить процесс на удаленном компьютере, имейте в виду, что у командлета Stop-Process отсутствует параметр –ComputerName. Для завершения процесса на удаленном компьютере можно использовать такой PowerShell код:

$RProc = Get-Process -Name notepad -ComputerName dc01
Stop-Process -InputObject $RProc

Завершение процессов в Windows командой taskkill

Команда taskkill позволяет завершить вышедший из под контроля процесс в Windows 7, если Диспетчер задач Windows 7 (Task Manager) не справляется с этой задачей.

Иногда возникает необходимость вручную завершить процесс, который не отвечает. В большинстве случаев это можно сделать с помощью Диспетчера задач Windows, однако порой ему не удается справиться с вышедшим из под контроля приложением. Мне часто приходилось сталкиваться с этим при попытке завершить процесс Acronis. В такой ситуации я обычно использую более мощный инструмент — команду taskkill.

Чтобы воспользоваться taskkill, нужно открыть окно командной строки. Для этого вызовите окно «Выполнить» (Run) из меню «Пуск» (Start) или воспользуйтесь клавишной комбинацией [Win]+[R] и введите «cmd» (без кавычек) в поле «Открыть» (Open, рис. A).

Использование команды taskkill

Общий синтаксис команды выглядит следующим образом:

Разумеется, для taskkill доступен широкий выбор опций. Перечислю лишь наиболее полезные из них:

• /s КОМПЬЮТЕР, где КОМПЬЮТЕР — это IP или адрес удаленного компьютера. По умолчанию, операция выполняется в локальной системе. Если именно это вас и интересует, данную опцию можно не использовать.

• /u ДОМЕН\ПОЛЬЗОВАТЕЛЬ, где ДОМЕН — это имя домена, а ПОЛЬЗОВАТЕЛЬ — имя пользователя, для которого нужно выполнить команду. Данная опция позволяет запускать taskkill с правами определенной учетной записи или домена.

• /p — обязательно используется в сочетании с опцией /u для указания пароля к учетной записи пользователя.

• /fi — позволяет выполнять команду taskkill с определенными фильтрами.

• /f — принудительно завершает выполнение команды.

• /IM — позволяет использовать имя приложения вместо идентификатора процесса.

Ну и разумеется, одна из самых полезных опций — переключатель для вызова справки (рис. В):

Рисунок B. Вывод справочной информации по команде taskkill при использовании переключателя справки.

Завершение процесса по имени приложения

Проще всего завершить вышедший из-под контроля процесс, воспользовавшись командой taskkill с использованием опции /IM. Выглядеть это будет так:

Здесь ИМЯ_ПРИЛОЖЕНИЯ — это имя процесса, который требуется завершить. К примеру, если Outlook не удается закрыть, можно воспользоваться следующей командой:

Завершение процесса по идентификатора

Если вы не знаете имени процесса, но знаете его идентификатор (PID) — например, 572 — можно воспользоваться следующей командой:

Завершение всех процессов для определенной учетной записи

Существует также возможность завершить все процессы для определенной учетной записи. Это особенно актуально, если совершенно точно известно, что проблема связана с определенной учетной записью, или если пользователь уже вышел из системы, а запущенные им процессы перестали отвечать. В таком случае можно воспользоваться следующей командой:

Здесь имя_пользователя — это имя учетной записи, под которой запущены нежелательные процессы. Обязательно нужно включить в команду опцию USERNAME, чтобы указать соответствующее имя пользователя.

Завершение процессов на удаленном компьютере

Еще одна удобная возможность — завершение процессов в удаленном режиме. Допустим, вы точно знаете, что система не отвечает из-за определенного процесса (возьмем для примера все тот же Outlook). В таком случае можно воспользоваться другим компьютером и выполнить следующую команду:

Здесь IP-АДРЕС — адрес удаленного компьютера (можно использовать и имя хоста, если компьютеры способны распознавать друг друга таким способом), ДОМЕН — имя домена (если требуется), а ПОЛЬЗОВАТЕЛЬ — имя пользователя, под которым был осуществлен вход на удаленный компьютер.

Команда taskkill — весьма мощный и функциональный инструмент, способный избавить от необходимости принудительной перезагрузки компьютера. Умелое использование этой команды в сочетании с Диспетчером задач продлевает время безотказной работы системы и даже позволяет бороться с вирусами, руткитами или троянцами.

Управление процессами с помощью командлетов Process Managing Processes with Process Cmdlets

Командлеты Process в Windows PowerShell позволяют управлять локальными и удаленными процессами в Windows PowerShell. You can use the Process cmdlets in Windows PowerShell to manage local and remote processes in Windows PowerShell.

Получение процессов (Get-Process) Getting Processes (Get-Process)

Для получения процессов, запущенных на локальном компьютере, выполните командет Get-Process без параметров. To get the processes running on the local computer, run a Get-Process with no parameters.

Читайте также:  Windows не открывает образ img

Отдельные процессы можно получить, указав их имена или идентификаторы. You can get particular processes by specifying their process names or process IDs. Следующая команда возвращает процесс Idle: The following command gets the Idle process:

То, что в некоторых ситуациях командлеты не возвращают данные, является нормальным. Однако если при указании процесса по его идентификатору Get-Process не находит совпадений, он выдает ошибку, так как стандартной целью является получение известного выполняющегося процесса. Although it is normal for cmdlets to return no data in some situations, when you specify a process by its ProcessId, Get-Process generates an error if it finds no matches, because the usual intent is to retrieve a known running process. Если процесс с указанным идентификатором отсутствует, весьма вероятно, что идентификатор неправильный или нужный процесс уже завершился: If there is no process with that Id, it is likely that the Id is incorrect or that the process of interest has already exited:

Параметр Name командлета Get-Process можно использовать для указания подмножества процессов на основе имени процесса. You can use the Name parameter of the Get-Process cmdlet to specify a subset of processes based on the process name. Параметр Name может принимать несколько имен в виде списка с разделителями-запятыми и поддерживает использование подстановочных знаков, что позволяет задавать шаблоны имен. The Name parameter can take multiple names in a comma-separated list and it supports the use of wildcards, so you can type name patterns.

Например, следующая команда возвращает процессы, имена которых начинаются с «ex.». For example, the following command gets process whose names begin with «ex.»

Поскольку класс System.Diagnostics.Process .NET является основой для процессов Windows PowerShell, он удовлетворяет некоторым соглашениям, используемым System.Diagnostics.Process. Because the .NET System.Diagnostics.Process class is the foundation for Windows PowerShell processes, it follows some of the conventions used by System.Diagnostics.Process. Одно из таких соглашений требует, чтобы имя процесса для исполняемого файла никогда не содержало «.exe» в конце имени этого файла. One of those conventions is that the process name for an executable never includes the «.exe» at the end of the executable name.

Get-Process также принимает несколько значений для параметра Name. Get-Process also accepts multiple values for the Name parameter.

Параметр ComputerName командлета Get-Process можно использовать для получения процессов на удаленных компьютерах. You can use the ComputerName parameter of Get-Process to get processes on remote computers. Например, следующая команда получает процессы PowerShell на локальном (представленным «localhost») и двух удаленных компьютерах. For example, the following command gets the PowerShell processes on the local computer (represented by «localhost») and on two remote computers.

Имена компьютеров в этих данных не указаны, однако они хранятся в свойстве MachineName объектов процесса, возвращаемых Get-Process. The computer names are not evident in this display, but they are stored in the MachineName property of the process objects that Get-Process returns. Следующая команда использует командлет Format-Table для отображения свойств ID, ProcessName и MachineName (ComputerName) объектов процесса. The following command uses the Format-Table cmdlet to display the process ID, ProcessName and MachineName (ComputerName) properties of the process objects.

Эта более сложная команда добавляет в стандартные отображаемые данные Get-Process свойство MachineName. This more complex command adds the MachineName property to the standard Get-Process display.

Остановка процессов (Stop-Process) Stopping Processes (Stop-Process)

Windows PowerShell позволяет гибко выводить списки процессов, но как обстоят дела с остановкой процесса? Windows PowerShell gives you flexibility for listing processes, but what about stopping a process?

Командлет Stop-Process принимает имя или идентификатор, указывающие останавливаемый процесс. The Stop-Process cmdlet takes a Name or Id to specify a process you want to stop. Возможность остановки процессов зависит от ваших разрешений. Your ability to stop processes depends on your permissions. Некоторые процессы остановить нельзя. Some processes cannot be stopped. Например, при попытке остановить неактивный процесс возникает ошибка: For example, if you try to stop the idle process, you get an error:

Можно также принудительно вывести запрос с помощью параметра Confirm . You can also force prompting with the Confirm parameter. Он особенно удобен при использовании подстановочного знака в имени процесса, так как случайно может быть определено соответствие с некоторыми процессами, которые не нужно останавливать: This parameter is particularly useful if you use a wildcard when specifying the process name, because you may accidentally match some processes you do not want to stop:

Читайте также:  Что делать если не включается беспроводная сеть windows 10

Сложную обработку процессов можно реализовать с помощью командлетов фильтрации объектов. Complex process manipulation is possible by using some of the object filtering cmdlets. Так как объект Process имеет свойство Responding, которое равно true, если он перестал отвечать, вы можете остановить все неотвечающие приложения с помощью следующей команды: Because a Process object has a Responding property that is true when it is no longer responding, you can stop all nonresponsive applications with the following command:

Аналогичный подход возможен и в других ситуациях. You can use the same approach in other situations. Предположим, например, что приложение дополнительной области уведомлений запускается автоматически при открытии другого приложения. For example, suppose a secondary notification area application automatically runs when users start another application. Эта процедура может работать неправильно в сеансах служб терминалов, однако вам все равно нужно сохранить ее в сеансах, выполняемых в консоли физического компьютера. You may find that this does not work correctly in Terminal Services sessions, but you still want to keep it in sessions that run on the physical computer console. Сеансы, подключенные к рабочему столу физического компьютера, всегда имеют идентификатор сеанса 0, поэтому можно остановить все экземпляры процесса, находящиеся в других сеансах, с помощью Where-Object и SessionId процесса: Sessions connected to the physical computer desktop always have a session ID of 0, so you can stop all instances of the process that are in other sessions by using Where-Object and the process, SessionId :

Командлет Stop-Process не использует параметр ComputerName. The Stop-Process cmdlet does not have a ComputerName parameter. Поэтому для выполнения команды остановки процесса на удаленном компьютере необходимо использовать командлет Invoke-Command. Therefore, to run a stop process command on a remote computer, you need to use the Invoke-Command cmdlet. Например, чтобы остановить процесс PowerShell на удаленном компьютере Server01, введите: For example, to stop the PowerShell process on the Server01 remote computer, type:

Остановка всех остальных сеансов Windows PowerShell Stopping All Other Windows PowerShell Sessions

В некоторых случаях может пригодиться возможность остановки всех выполняющихся сеансов Windows PowerShell, отличных от текущего. It may occasionally be useful to be able to stop all running Windows PowerShell sessions other than the current session. Если сеанс использует слишком много ресурсов или недоступен (он может выполняться удаленно или в другом сеансе), возможно, остановить его напрямую не получится. If a session is using too many resources or is inaccessible (it may be running remotely or in another desktop session), you may not be able to directly stop it. При попытке остановить все выполняющиеся сеансы может быть завершен текущий сеанс. If you try to stop all running sessions, however, the current session may be terminated instead.

Каждый сеанс Windows PowerShell имеет переменную среды PID, содержащую идентификатор процесса Windows PowerShell. Each Windows PowerShell session has an environment variable PID that contains the Id of the Windows PowerShell process. Можно проверить переменную $PID на наличие идентификатора каждого сеанса и завершить только сеансы Windows PowerShell с другим идентификатором. Следующая команда конвейера делает именно это и возвращает список завершенных сеансов (из-за использования параметра PassThru ): You can check the $PID against the Id of each session and terminate only Windows PowerShell sessions that have a different Id. The following pipeline command does this and returns the list of terminated sessions (because of the use of the PassThru parameter):

Запуск, отладка и ожидание процессов Starting, Debugging, and Waiting for Processes

Windows PowerShell также имеет командлеты для запуска (или перезапуска), отладки процесса и ожидания завершения процесса перед выполнением команды. Windows PowerShell also comes with cmdlets to start (or restart), debug a process, and wait for a process to complete before running a command. Дополнительные сведения об этих командлетах см. в разделах справки по каждому из них. For information about these cmdlets, see the cmdlet help topic for each cmdlet.

Оцените статью